<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bearer Engineering</title>
    <description>The latest articles on DEV Community by Bearer Engineering (@bearer_eng).</description>
    <link>https://dev.to/bearer_eng</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F283437%2Fe4bcdf53-753e-4c23-935c-f0c76441c332.jpg</url>
      <title>DEV Community: Bearer Engineering</title>
      <link>https://dev.to/bearer_eng</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bearer_eng"/>
    <language>en</language>
    <item>
      <title>Tips for Running an Effective Virtual Offsite</title>
      <dc:creator>Bearer Engineering</dc:creator>
      <pubDate>Fri, 28 Aug 2020 13:20:24 +0000</pubDate>
      <link>https://dev.to/bearer/tips-for-running-an-effective-virtual-offsite-480g</link>
      <guid>https://dev.to/bearer/tips-for-running-an-effective-virtual-offsite-480g</guid>
      <description>&lt;p&gt;&lt;em&gt;📣 This post originally appeared as &lt;a href="https://blog.bearer.sh/tips-for-virtual-offsite/" rel="noopener noreferrer"&gt;Tips for Running an Effective Virtual Offsite&lt;/a&gt; on &lt;a href="https://blog.bearer.sh" rel="noopener noreferrer"&gt;The Bearer Blog&lt;/a&gt;.&lt;/em&gt; &lt;br&gt;
Offsites are a big part of remote teams. They allow everyone to socialize, connect more deeply with coworkers, and help build shared experiences and empathy. Even if video calls are a great tool to share information, &lt;a href="https://www.nationalgeographic.com/science/2020/04/coronavirus-zoom-fatigue-is-taxing-the-brain-here-is-why-that-happens/" rel="noopener noreferrer"&gt;they can be tiring&lt;/a&gt;. It's too easy to miss non-verbal cues. Chance encounters over coffee never happen, and we don’t always experience the same personal connections that come from small-talk. That’s the downside of remote work, and that's why meeting a few times a year is a great way to fill the gap!&lt;/p&gt;

&lt;p&gt;Planning an offsite can be challenging, but it also provides the opportunity for your team to explore an exciting place. With many teams looking for ways to mimic the traditional offsite in a limited-travel world, here are a few tips we learned after holding our first &lt;strong&gt;virtual offsite&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;The Bearer team is remote-first. Other than a few Bears that live in the same region, most of us only see one another digitally. This is why we put an emphasis on consistent offsite events. Shortly before COVID-19, we held one in France. Before that, the team met up in Portugal. The number of offsite photos used as Zoom backgrounds tells me that the team really enjoys them!&lt;/p&gt;

&lt;p&gt;Because of the COVID-19 crisis, we couldn’t organize the offsite we were planning for Q2. Travel was more difficult, but beyond that, we wouldn’t have taken the risk of putting our coworker’s health in jeopardy. Our first thought was to cancel it, but we decided to experiment with a full-virtual offsite. A remote, remote offsite that we dubbed &lt;strong&gt;Together Week&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a mix of work and play
&lt;/h2&gt;

&lt;p&gt;We came up with a lot of ideas to make this week enjoyable and took inspiration from &lt;a href="https://www.hotjar.com/blog/virtual-team-building-activities/" rel="noopener noreferrer"&gt;Hotjar’s article on virtual team building&lt;/a&gt;. We also had a nice chat with Bele Schütt from &lt;a href="https://www.candis.io/" rel="noopener noreferrer"&gt;Candis&lt;/a&gt; who organized a remote offsite day a few weeks before ours.&lt;/p&gt;

&lt;p&gt;The first question that came to mind was: if we miss the human interaction component, what should we focus on? This would be a time to take a step back from our daily work, mix up the normal team dynamics, and work on “something different.” The offsite should allow everyone to take time to experiment, far from the usual roadmap.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set a theme, a task, and a goal
&lt;/h3&gt;

&lt;p&gt;We put together teams made up of members from each department and set them a task to complete by the end of the week. Our project theme became: &lt;em&gt;How can we attract more top-notch developers to test and adopt Bearer&lt;/em&gt;. Aside from the hard-limit on planning and presenting, no constraints or restrictions were set on what or how a team could approach the theme.&lt;/p&gt;

&lt;p&gt;Our teams shared the work, discussed, debated, and built solutions throughout the week. All the teams did a great job. We aren’t just saying that. On Friday, each team had the opportunity to present what they spent the week building. Not only were the presentations amazing, but all the ideas have found their way onto future roadmaps at Bearer. It was great to see how impressed everyone was by each other's work!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2020%2F07%2Fpresentation.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2020%2F07%2Fpresentation.png" alt="Screenshot of a Bearer presentation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While we initially planned to offer a prize to the winning team, the quality of work made it impossible to choose.&lt;/p&gt;

&lt;p&gt;Instead of selecting a single winner, we decided that everybody won. Everyone at Bearer will receive a beautiful pair of hand-made slippers as a souvenir. The perfect treat for working from home!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2020%2F07%2Fslippers.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2020%2F07%2Fslippers.png" alt="Wool slippers"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Incorporate social activities and outside voices
&lt;/h3&gt;

&lt;p&gt;Make the week special. On top of a hackathon or special-projects sprint, incorporate time for both structured and unstructured socializing. Find ways for to increase team bonding without making it feel like a chore. Here are a few things that worked well for us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guest Speakers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To bring in some fresh ideas, we invited external speakers to share their experiences. A huge thank you to &lt;a href="https://twitter.com/SylvainKalache" rel="noopener noreferrer"&gt;Sylvain Kalache&lt;/a&gt; from &lt;a href="https://www.holbertonschool.com/" rel="noopener noreferrer"&gt;Holberton School&lt;/a&gt;, Maxime Locqueville from&lt;a href="https://www.algolia.com/" rel="noopener noreferrer"&gt;Algolia&lt;/a&gt;, &lt;a href="https://twitter.com/rdutel" rel="noopener noreferrer"&gt;Rodolphe Dutel&lt;/a&gt; from &lt;a href="https://remotive.io/" rel="noopener noreferrer"&gt;Remotive&lt;/a&gt;, and &lt;a href="https://twitter.com/dzello" rel="noopener noreferrer"&gt;Josh Dzielak&lt;/a&gt; from &lt;a href="https://orbit.love/" rel="noopener noreferrer"&gt;Orbit&lt;/a&gt;. Each came, virtually, to speak with the team. We learned about great remote routines, tips for working in multicultural teams, and advice on building a nice developer experience and community.&lt;/p&gt;

&lt;p&gt;Make sure to record each session for those that cannot attend live. Spreading these throughout the week is a great way to inspire and keep the team motivated!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team meals and coffee breaks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To help with the missing social aspect of offsites, ask everyone to take virtual coffee breaks during the week. More specifically, we encouraged our team to meet with someone they don't work with often. Some team members made small talk and used the time to catch up. Others got into discussions about quarantine life, and some used the questionnaire answers and guest speaker talks as conversation starters.&lt;/p&gt;

&lt;p&gt;The team also scheduled a few “happy hour” style events across different time zones. We tried to align them so those starting the day could share coffee and breakfast, while those ending the day could share drinks and dinner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Escape Game&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Early on, we decided against many of the “game” style team building activities for fear that they would be stressful for some, and difficult with Zoom. One that we did try was a virtual escape game. The team split into groups of roughly 6-8 people, and an outside facilitator set every person a task. We all had information to share and the goal was to crack our individual codes, then combine our information to save the world! For some of us, the puzzle was quite challenging, and the discussions carried over into the after-work happy hour!&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it work from anywhere
&lt;/h2&gt;

&lt;p&gt;Make sure everyone can take part, no matter their location and time zone. This should be obvious for a remote team, but offsites are so often thought of as a way to break the rules, that it can be easy to forget. With team members in Bangkok, South Africa, the United States, and spread across Europe, the challenge for our team was high! This meant enforcing asynchronous communication and documenting everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set up shared workspaces if you haven’t already&lt;/strong&gt;. We use Notion, Miro, and Slack heavily within the teams. Each team set up dedicated channels and documents for the week’s tasks. We also put together a company-wide channel in slack dedicated to the offsite. This keeps the normal work channels clear, but also acts as a nice archive of the events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be as asynchronous as possible, within reason&lt;/strong&gt;. Sometimes it really helps to get together. We let each team manage their own meeting times. Teams were assembled so there was at least an hour or two of overlap to allow for daily check-ins as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Record any “live” chats and alternate the scheduling&lt;/strong&gt;. Earlier we talked about inviting speakers. When scheduling these, try to mix up the times to allow everyone to attend some of them live. For those that cannot make them all, record the sessions for later viewing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make support available throughout the process
&lt;/h2&gt;

&lt;p&gt;For our hackathon-style task, we paired up teams to provide feedback and support. Team A was in charge of feedback for Team B, Team B for Team C, and so on. This gave teams fresh eyes and a sounding board for their ideas. An approach such as this encourages teams to interact more and keeps the feedback loops efficient.&lt;/p&gt;

&lt;p&gt;We also had a handful of people within the company working outside of the hackathon structure. In particular, our founders Guillaume and Cedric. They made themselves available to the teams throughout the week, and offered support and ideas from a higher-view perspective. Some teams took advantage of their insight more than others, but all found the direct input throughout the process useful. Designate managers or others to ensure you have coverage and can support the teams in any way they need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use this time to improve team resources
&lt;/h2&gt;

&lt;p&gt;Improving team dynamics and social experiences within remote teams is one of the largest benefits of a traditional offsite. That doesn’t mean the same ideas can’t help inform your day-to-day processes. For example, we decided to create a page in Notion where people can share more about themselves. To make it easier, we used a mix of &lt;a href="https://www.wikiwand.com/en/Proust_Questionnaire" rel="noopener noreferrer"&gt;Proust questionnaires&lt;/a&gt;, &lt;a href="https://medium.com/swlh/user-manual-to-me-92c8ce68f960" rel="noopener noreferrer"&gt;user manuals,&lt;/a&gt; and work-related questions. The team has been very creative in the format. As the last hire in the team, I enjoyed reading each of the descriptions and found some common talking points to discuss with the team soon. I’m sure the new hires will enjoy it as much I have!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FwdXDLJ_4eNItK5NmLCwBZkVyd89aQLUSk-tl5kTozc_q2N4JHQ_kxn8i_hW_Sz7ZVoNCw4OtB_ZyekMfY8GzVDkA0qNOZdUvER24QpzVIDKjwQ37Jf_tV2XEnOA0e93SPLL8vQg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh6.googleusercontent.com%2FwdXDLJ_4eNItK5NmLCwBZkVyd89aQLUSk-tl5kTozc_q2N4JHQ_kxn8i_hW_Sz7ZVoNCw4OtB_ZyekMfY8GzVDkA0qNOZdUvER24QpzVIDKjwQ37Jf_tV2XEnOA0e93SPLL8vQg" alt="Team questionnaire responses"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a shared experience
&lt;/h2&gt;

&lt;p&gt;One way to further make everyone feel connected around the event is to send out a care package. This can be a kind of onboarding box that arrives before the week begins. In this box, each person will receive what they need for the week. Things like: a notebook, an interesting book to read, some snacks, and maybe even some instructions for a treasure hunt.&lt;/p&gt;

&lt;p&gt;While time constraints and logistics prevented us from doing it this time, we feel like it’s a great way to reward the team, and set a tone for the week. Not to mention it is a great excuse to print some new company-branded gear! You don’t even want to know the number of Bear-related puns we came up with during the offsite. Some were _unbearably_bad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Look for ways to improve future offsites
&lt;/h2&gt;

&lt;p&gt;No amount of planning will make for the perfect event, so make sure to solicit feedback from your team. What worked for them? What did they enjoy the most? What would they change? Overall, we received very positive feedback from the team, which was our main goal. We wanted people to have a good time and to work differently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F7txsa7dDOBRm8HHO4GwHvqU4R8uL5HtYO3j20OExdp1dj1HRnYKfbwX4ezRFhNQIY1AjX0wWNVOSUltxsJyT4r72I63FVFud_I7U0iCChLyk6HAISVR17RosR39jGMS-UZQu3Nk" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2F7txsa7dDOBRm8HHO4GwHvqU4R8uL5HtYO3j20OExdp1dj1HRnYKfbwX4ezRFhNQIY1AjX0wWNVOSUltxsJyT4r72I63FVFud_I7U0iCChLyk6HAISVR17RosR39jGMS-UZQu3Nk" alt="Feedback quotes from the team"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also received some valuable constructive feedback. One item that stood out was making sure the games were accessible to non-native English speakers. Solving anagrams is hard enough when they are in your native language!&lt;/p&gt;

&lt;h2&gt;
  
  
  Core things to keep in mind
&lt;/h2&gt;

&lt;p&gt;We learned a great deal from our first virtual offsite. While it can’t completely replace the enjoyment of all getting together in an exciting location a few times a year, it gets about as close as you can.&lt;/p&gt;

&lt;p&gt;If you’re planning to organize a virtual offsite week, here are some tips to get you started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Break into small groups to make sure the work part is enjoyable.&lt;/li&gt;
&lt;li&gt;  Virtual escape games are a really great option!&lt;/li&gt;
&lt;li&gt;  Invite people from the outside to learn from them: it’s the perfect time to open your minds!&lt;/li&gt;
&lt;li&gt;  See if there are any social, internal tasks you want to address that you never take the time to do, or those you want to experiment with. Have everyone fill out a bio, set up video game groups, launch a coffee break app, and improve your remote onboarding!&lt;/li&gt;
&lt;li&gt;  Make sure you’re clear on the expected outcomes: as soon as we agreed on the fact that it was okay not to have immediate results from the work of the teams, the fun and experiments really started.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With our first virtual offsite now completed, we are already thinking about the next Together Week and are dreaming of having the possibility to do it in real life! Stay tuned for photos of happy bears in cozy slippers.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;By &lt;a href="https://twitter.com/marionaguirre" rel="noopener noreferrer"&gt;Marion Aguirre&lt;/a&gt;, Head of Talent @ Bearer&lt;/em&gt;  &lt;/p&gt;

</description>
      <category>remote</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>How to configure the imgur API</title>
      <dc:creator>Bearer Engineering</dc:creator>
      <pubDate>Thu, 12 Dec 2019 17:42:41 +0000</pubDate>
      <link>https://dev.to/bearer/how-to-configure-the-imgur-api-2ap9</link>
      <guid>https://dev.to/bearer/how-to-configure-the-imgur-api-2ap9</guid>
      <description>&lt;p&gt;This guide explains how to configure the Imgur API, using OAuth2.0 for authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to your &lt;a href="https://imgur.com" rel="noopener noreferrer"&gt;imgur account&lt;/a&gt; (&lt;em&gt;step 1&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Create a new application (&lt;em&gt;step 2&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Grab your credentials (&lt;em&gt;steps 3&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step by step
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; &lt;a href="https://imgur.com" rel="noopener noreferrer"&gt;Sign in to your imgur account&lt;/a&gt;. Imgur use the same account for their main website, as well as the developers portal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-home.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-home.png" alt="imgur-home"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Once signed in, open the &lt;a href="https://api.imgur.com/oauth2/addclient" rel="noopener noreferrer"&gt;OAuth application registration form&lt;/a&gt;. From there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enter your &lt;strong&gt;Application name&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;confirm that the Authorization type is &lt;em&gt;OAuth2 authorization with a callback URL&lt;/em&gt; (default option)&lt;/li&gt;
&lt;li&gt;register a &lt;strong&gt;redirect URL&lt;/strong&gt; to handle the OAuth dance. Use &lt;code&gt;https://int.bearer.sh/v2/auth/callback&lt;/code&gt; to let Bearer handle the authentication flow on your behalf.&lt;/li&gt;
&lt;li&gt;provide an email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-apps-new.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-apps-new.png" alt="imgur-apps-new"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Click save and that's it! Imgur will prompt your API keys right away.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-apps-keys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.bearer.sh%2Fcontent%2Fimages%2F2019%2F12%2Fimgur-apps-keys.png" alt="imgur-apps-keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If ever you need to find your credentials again, they are accessible from &lt;a href="https://imgur.com/account/settings/apps" rel="noopener noreferrer"&gt;your account settings&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Video guide
&lt;/h2&gt;

&lt;p&gt;Follow along as we create a new application:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AEHr_H4OMIU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;You're now all set to build an awesome integration with the Imgur API. To help you get it through easily, here are a few more links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.bearer.sh/integrations/68/imgur-api" rel="noopener noreferrer"&gt;Examples and tutorials&lt;/a&gt; curated by Bearer.sh&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.bearer.sh/integrations/68/imgur-api/generate-an-access-token" rel="noopener noreferrer"&gt;Create a temporary access-token&lt;/a&gt; with our generator&lt;/li&gt;
&lt;li&gt;Learn more about the API in the &lt;a href="https://apidocs.imgur.com/?version=latest" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>authentication</category>
      <category>api</category>
      <category>oauth</category>
    </item>
    <item>
      <title>How to configure the Eventbrite API</title>
      <dc:creator>Bearer Engineering</dc:creator>
      <pubDate>Wed, 11 Dec 2019 17:29:05 +0000</pubDate>
      <link>https://dev.to/bearer/how-to-configure-the-eventbrite-api-453k</link>
      <guid>https://dev.to/bearer/how-to-configure-the-eventbrite-api-453k</guid>
      <description>&lt;p&gt;This guide explains how to configure the Eventbrite API, using OAuth, to use that API in your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to the Eventbrite developers platform (&lt;em&gt;step 1&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Access the apps dashboard (&lt;em&gt;steps 2 to 3&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;Create a new application and grab credentials (&lt;em&gt;steps 4 to 6&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step by step
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; &lt;a href="https://www.eventbrite.com/platform"&gt;Sign in to the Eventbrite Developers Platform&lt;/a&gt;. This is where Eventbrite helps developers integrate with the service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VslKwulp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-home.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VslKwulp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-home.png" alt="eventbrite-home" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Hover over your profile and click on "Account settings" to &lt;a href="https://www.eventbrite.com/account-settings/apps"&gt;access your profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---gNfwwTB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-home-menu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---gNfwwTB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-home-menu.png" alt="eventbrite-home-menu" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; In the sidebar of your profile, scroll to the "Developer Links" sections and click on "API Keys". This is where you will manage your different credentials to authenticate with the Eventbrite API. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Click on "Create API Key" to create a new OAuth2.0 application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I2sUUxO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-new.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I2sUUxO2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-new.png" alt="eventbrite-apps-new" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5.&lt;/strong&gt; Provide the details asked to save the OAuth consent screen, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contact details&lt;/li&gt;
&lt;li&gt;Application name and website&lt;/li&gt;
&lt;li&gt;Register the URL you will use to receive the callback once the user logs into Eventbrite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D1l6hvCk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-form.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D1l6hvCk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-form.png" alt="eventbrite-apps-form" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡This information can change at any time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Step 6.&lt;/strong&gt; Save the form and that's it! Eventbrite will immediately create credentials. If you need to access them again, you can head back anytime to your &lt;a href="https://www.eventbrite.com/account-settings/apps"&gt;apps dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LgRx8mBi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-keys.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LgRx8mBi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.bearer.sh/content/images/2019/12/eventbrite-apps-keys.png" alt="eventbrite-apps-keys" width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Video Overview
&lt;/h2&gt;

&lt;p&gt;As always, follow the same instructions to configure your Eventbrite API integration in this video:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/iy0LufxPwwA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next?
&lt;/h2&gt;

&lt;p&gt;You're now ready to integrate natively with the Eventbrite API. To start building your integration, here are a few links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn more about the API in the &lt;a href="https://www.eventbrite.com/platform/api"&gt;official documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Automatically monitor your integration with a monitoring tool, like &lt;a href="https://www.bearer.sh"&gt;Bearer&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>oauth</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Understanding Auth Part 1: What is OAuth 2.0?</title>
      <dc:creator>Bearer Engineering</dc:creator>
      <pubDate>Mon, 02 Dec 2019 18:09:15 +0000</pubDate>
      <link>https://dev.to/bearer/understanding-auth-part-1-what-is-oauth-2-0-2he9</link>
      <guid>https://dev.to/bearer/understanding-auth-part-1-what-is-oauth-2-0-2he9</guid>
      <description>&lt;p&gt;(&lt;em&gt;This article originally appeared on &lt;a href="https://www.bearer.sh/blog/understanding-auth-part-1-what-is-oauth"&gt;Bearer.sh&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;In this series of blog posts, we will look at the varieties of OAuth 2.0, how OpenID Connect builds on top of OAuth 2.0 and fills in a few gaps, and the authentication and authorization ecosystem as a whole.&lt;/p&gt;

&lt;p&gt;This first article is all about OAuth 2.0, so let's start with the difference between authorization and authentication:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authorization&lt;/strong&gt; relates to whether a client application has &lt;strong&gt;permission&lt;/strong&gt; to access a protected resource. &lt;strong&gt;Authentication&lt;/strong&gt; is about proving the owner of the resource is present, and obtaining information about their &lt;strong&gt;identity&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We'll try not to get too technical, but if the gory details are what floats your boat then stay tuned for future articles where we dive deeper into the specifics.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OAuth?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tools.ietf.org/html/rfc6749"&gt;The OAuth 2.0 Framework&lt;/a&gt; is a standard for authorizing a client application to access protected resources.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Client ID and Client Secret are what identify a client application. Together they are the known as &lt;strong&gt;client credentials&lt;/strong&gt; and can often be found on the API provider's dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An API may expose many different resources, and many operations targeting those resources. The client can request limited access to the API by specifying a set of &lt;strong&gt;scopes&lt;/strong&gt; during the authorization process. These scopes are specific to a given API.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A blogging API could use scopes such as &lt;code&gt;read_posts&lt;/code&gt;, &lt;code&gt;read_comments&lt;/code&gt; and &lt;code&gt;create_post&lt;/code&gt;. A different blogging platform may prefer less granularity and offer only &lt;code&gt;read&lt;/code&gt; and &lt;code&gt;write&lt;/code&gt; scopes in its API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the client application completes the authorization process, it obtains an &lt;strong&gt;access token&lt;/strong&gt;. This is then sent along with each API call as proof that the application is allowed to access the requested resource.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To limit the security risk of access tokens that are leaked or logged along with API calls, &lt;strong&gt;access tokens can expire&lt;/strong&gt; after a period of time. The client application then has to go through the authorization process again to obtain a new access token.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Grant types
&lt;/h2&gt;

&lt;p&gt;There are multiple flavors of OAuth 2.0 called &lt;strong&gt;grant types&lt;/strong&gt;. Each one uses a different set of steps to obtain the access token, depending on the kind of client application performing the authorization.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Grant types can be broadly split into 2-legged and 3-legged variants. This refers to the number of parties involved in the authentication process.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3-legged grant types
&lt;/h3&gt;

&lt;p&gt;The three-legged grant types are the &lt;strong&gt;most common and support delegating access&lt;/strong&gt; to a protected resource that is owned by a third-party. The three "legs" are the client application, the API that the client wishes to use (subdivided into an authorization server and resource server), and the resource owner (typically an end user of the client application).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j0hyU5FN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.bearer.sh/content/images/2019/11/oauth-Page-1--1-.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j0hyU5FN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.bearer.sh/content/images/2019/11/oauth-Page-1--1-.svg" alt="3-legged grant type diagram" width="547" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The three-legged grant types are designed such that the client never obtains access to the resource owner's credentials, or any information about their identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authorization code grant&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The authorization code grant type is the &lt;strong&gt;most common variant&lt;/strong&gt; of OAuth 2.0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The client application uses a web browser.&lt;/li&gt;
&lt;li&gt;  The client application is confidential. This is typically when the application is running on a server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resource owner's web browser performs a series of steps involving both the client application and the API's authorization server. This is sometimes referred to as the OAuth Dance.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: You may experience this grant type if you ever log into an application with another service's credentials, like LinkedIn or Google. The application never directly receives your login and password, but instead handles the process by communicating with the third party.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During this process, the resource owner authenticates directly with the authorization server and a short-lived code is returned to the client application. The client application then authenticates with the authorization server using the client credentials and exchanges the code for the access token.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Although OAuth 2.0 doesn't specify the mechanism of authentication that the authorization server will use, this usually follows a pattern where the user provides their login credentials and then consents to the requested set of scopes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Implicit grant (not recommended)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The client application uses a web browser.&lt;/li&gt;
&lt;li&gt;  The client application is public, e.g., when the application is running entirely within the browser, or when it's a mobile application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This follows a similar process to the authorization code grant type but returns the access token directly to the client application via the browser, rather than using an intermediate code.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is &lt;strong&gt;not recommended to use the implicit grant type&lt;/strong&gt; as it is not as secure as other methods. One alternative is to use the Authorization Code grant type with the &lt;a href="https://tools.ietf.org/html/rfc7636"&gt;Proof Key for Code Exchange (PKCE) extension.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Device code grant&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;a href="https://tools.ietf.org/html/rfc8628"&gt;device code grant type&lt;/a&gt; is an addition to the original OAuth 2.0 specification.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The client application is not using a web browser, or lacks the ability for the user to input their credentials during the authorization flow.&lt;/li&gt;
&lt;li&gt;  The user has access to a web browser with sufficient input capabilities via other means, e.g., via a secondary device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The client application makes an initial request to the authorization server and obtains a code and verification URL. The resource owner must then manually visit the URL, go through an authentication process, and enter the code. During this process, the client application polls the authorization server. When the process is completed, the access token is returned to the client application.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: You may have experienced this grant type when logging into a streaming service on a smart TV. The app gives you a web address and a code to enter, then you log into the service on your phone or computer. Once you enter the provided code, the app on your TV receives the access token and you can begin using the app.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2-legged grant types
&lt;/h3&gt;

&lt;p&gt;The two-legged grant types involve the client application directly supplying the credentials to authorize. The two "legs" are the client application (which might also be the resource owner) and the API that the client application wishes to use (subdivided into an authorization server and resource server).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--syuknLF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.bearer.sh/content/images/2019/11/oauth-Page-2.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--syuknLF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://blog.bearer.sh/content/images/2019/11/oauth-Page-2.svg" alt="2-legged grant type diagram" width="482" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The two-legged grant types are typically used for machine-to-machine (M2M) authorization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Client credentials grant&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The client application is accessing its own resources, or permission to access resources has been granted by the resource owner via another (non-OAuth 2.0) mechanism.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using this grant type, the client application is able to obtain an access token using only its own client credentials (Client ID and Client Secret).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource owner password grant (not recommended)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The client application is not the resource owner.&lt;/li&gt;
&lt;li&gt;  There is a high degree of trust between the resource owner and the client application.&lt;/li&gt;
&lt;li&gt;  A three-legged grant type cannot be used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resource owner provides the client application with a username and password and the client application uses these along with its own client credentials to obtain an access token from the authorization server.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is &lt;strong&gt;not recommended&lt;/strong&gt; to use the resource owner password grant type as it requires the resource owner to share their credentials with the client application&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Refresh token grant&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this grant type when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A refresh token was returned from a previous authorization request.&lt;/li&gt;
&lt;li&gt;  The access token from a previous authorization request has expired.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an access token has expired, the client application has to go through the authorization process again to obtain a new access token. For the 3-legged grant types, this would require the user to be present and to re-authenticate. For the 2-legged password grant, this would require the client application to store the user's credentials. This may not always be possible or desirable. To avoid this, &lt;strong&gt;many APIs return a refresh token&lt;/strong&gt; along with the access token which can be used to re-authorize the client application.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Some APIs require refresh tokens to be enabled in their developer dashboard, or only return a refresh token if a special scope (e.g., &lt;code&gt;offline_access&lt;/code&gt;) is requested when authorizing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Using a separate refresh token to periodically renew the access token is more secure&lt;/strong&gt; than having a long-lived/non-expiring access token. The access token is sent with every request for a protected resource and might be used in many places in the client application. Whereas the refresh token is only sent to the authorization server and its usage in the client application can be far more isolated. This makes it easier to secure the refresh token against being leaked and limits the window of opportunity if the access token were to be leaked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Token introspection
&lt;/h2&gt;

&lt;p&gt;The OAuth 2.0 specification defines a limited set of metadata (e.g., the access token expiry time and the granted scopes) that can be returned as part of the authorization process. There are other useful pieces of information that have historically been added as non-standard attributes in the authorization response, such as the refresh token expiry time. It's also possible that the information returned at authorization time may become outdated. For example, an access token could be revoked by the resource owner.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://tools.ietf.org/html/rfc7662"&gt;OAuth 2.0 Token Introspectionstandard&lt;/a&gt; allows a client application to &lt;strong&gt;inspect an access token or refresh token at any time&lt;/strong&gt; and retrieve up-to-date metadata about it. Some notable values that can be returned are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Whether the token is still active.&lt;/li&gt;
&lt;li&gt;  The scopes that were granted.&lt;/li&gt;
&lt;li&gt;  When the token was issued.&lt;/li&gt;
&lt;li&gt;  When the token expires.&lt;/li&gt;
&lt;li&gt;  Who the resource owner is.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; For the Salesforce API, the expiry time of an access token &lt;a href="https://salesforce.stackexchange.com/a/73550"&gt;depends on factors&lt;/a&gt; that cannot be known at the time of authorization, e.g., when the last API call was made. The token introspection endpoint can be used to check whether the token is still active and when it is currently expected to expire.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In the first part of this series, we looked at OAuth 2.0 and how it standardizes a wide range of authorization scenarios that are relevant to building and consuming APIs. Although there is still a lot of complexity in the details of OAuth 2.0, having a standard allows libraries, frameworks and services to help you manage this so you can keep your users' data secure and focus on the core business logic of your application.&lt;/p&gt;

&lt;p&gt;Don't miss the next part in this series where we look at OpenID Connect and how it can be used to support "Sign in with Google" type functionality, and more! 🚀&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Discuss this article on Twitter and ping us &lt;a href="https://twitter.com/BearerSH"&gt;@BearerSH&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>api</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
