Reverb Coding Challenge

Welcome! This technical challenge is our way to start a conversation around modeling, maintainability, and tradeoffs. This isn't a test with correct answers.

The Problem

We provide an API for developers to create new experiences powered by Reverb. We'd like you to use this API to build a program with the following features:

  • Category Search — Given a string, return all categories that contain that string. For example, a search for the category "Electric" would match "Electric Guitars", "Electric Pianos", etc.
  • Show Listings — In pages of 10 results, return all listings. If the user includes a category, limit the listings to those within that category.

Specifications

We're deliberately vague on the implementation details of this program. If you're most comfortable with backend programming, please build this as a command line application in your favorite programming language. If you're happiest in the frontend, please build this with a user interface instead.

Aim to spend no more than 3-4 hours working on your program. Also, there is no "extra credit" for this challenge so don't feel the need to create a beautiful interface – this isn't a test of visual design.

Use the programming language and tools of your choice to complete this. Please provide a README that includes details on installing the required languages, tools, packages, and testing frameworks for evaluating your program.

When you come onsite for an interview with us, expect to extend or modify this solution with new features. We'll also ask you to talk a bit about your program and your feedback from using the Reverb API.

Documentation on our API is available at reverb-api.com. Note: You do not need to "register" for our API. That form is there so that we can help potential 3rd party integrators; you can just start using the API.

Our Criteria

We believe in transparency, so here's the criteria we'll be using to evaluate each submission:

  • Functionality — Does your program work when we run it according to the instructions in the README? Does it implement the features listed above?
  • Modeling — How do you model the Reverb API in code?
  • Documentation — Does your README include everything we need to set up, run, and understand your submission? Is your code appropriately documented?
  • Language Use — Do you make good use of the features available in the language you chose?
  • Testing — Did you include tests that explain and reinforce the design of your code?

Hints and Tips

  • To complete this challenge, you only need to use 2 api endpoints: https://api.reverb.com/api/categories/flat and https://api.reverb.com/api/listings/all (Hint: the latter takes a category_uuid param)
  • Please make sure you are using the correct headers in your requests! https://www.reverb-api.com/docs/http-headers
  • Please use a language / environment you are comfortable in. We will ask you to extend this code during the in-office interview and want to see you at your best
  • Try not to spend more than an 3-4 hours on the challenge as long as it works; we like good code, but it doesn't need to be perfect and we love talking about trade-offs!

Good luck!