# BFF.fm Developer Platform & APIs

BFF.fm is a community radio station in San Francisco, California. You can tune in live at https\://bff.fm. We provide a number of public data endpoints with which you can build fun things.


# Live Broadcast

Get BFF.fm playback live in your app.

## MP3 Audio Stream

<mark style="color:blue;">`GET`</mark> `https://stream.bff.fm/1/mp3.format`

The live BFF.fm broadcast is available encoded in MP3, packaged in a variety of formats.

#### Path Parameters

| Name   | Type   | Description                                                      |
| ------ | ------ | ---------------------------------------------------------------- |
| format | string | The playlist format desired: \`mp3\`, \`xspf\`, \`pls\`, \`m3u\` |

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

#### Headers

| Name       | Type   | Description                                                                                                       |
| ---------- | ------ | ----------------------------------------------------------------------------------------------------------------- |
| User-Agent | string | The name of your app, so that we can better understand a little bit about how our listeners prefer to hear BFF.fm |

{% tabs %}
{% tab title="200 " %}
{% tabs %}
{% tab title="mp3.mp3" %}
{% code title="mp3.mp3" %}

```http
HTTP/1.0 200 OK
Access-Control-Expose-Headers: ETag, If-None-Match
Access-Control-Allow-Credentials: true
X-Loudness: -16.089101
icy-br: 128
icy-pub: 1
icy-description: BFF.fm
icy-audio-info: ice-samplerate=44100;ice-bitrate=128;ice-channels=2
Access-Control-Allow-Origin: *
icy-url: http://www.bff.fm
Instance-id: b753d6e5219ea5c48947a2de2cb08a58
Cache-Control: no-cache
Server: AIS Streaming Server 8.0.14
icy-genre: Pop
Expires: Mon, 26 Jul 1997 05:00:00 GMT
icy-metaint: 0
Access-Control-Allow-Headers: ETag, If-None-Match
Pragma: no-cache
icy-name: BFF.fm
Connection: close
Content-Type: audio/mpeg

[MP3 Binary Data]
```

{% endcode %}
{% endtab %}

{% tab title="mp3.m3u" %}
{% code title="mp3.m3u" %}

```
http://stream.bff.fm/1/mp3.mp3

```

{% endcode %}
{% endtab %}

{% tab title="mp3.pls" %}
{% code title="mp3.pls" %}

```
[playlist]
File1=http://stream.bff.fm/1/mp3.mp3
Title1=BFF.fm – Best Frequencies Forever
Length1=-1
NumberOfEntries=1
Version=2
```

{% endcode %}
{% endtab %}

{% tab title="mp3.xspf" %}
{% code title="mp3.xspf" %}

```markup
<?xml version="1.0" encoding="UTF-8"?>
<playlist xmlns="http://xspf.org/ns/0/" version="1">
  <title>BFF.fm – Best Frequencies Forever</title>
  <creator>Best Frequencies, Inc</creator>
  <info>https://bff.fm</info>
  <image>https://a.bff.fm/w/assets/favicons/apple-touch-icon/670e7f66554fa4d50219e02bee256e233047dc1e.png</image>
  <trackList>
    <track>
      <location>http://stream.bff.fm/1/mp3.mp3</location>
      <title>BFF.fm</title>
      <info>https://bff.fm</info>
    </track>
  </trackList>
</playlist>
```

{% endcode %}
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}


# Shows & Podcasts

Feeds for show archives.

## Single Show Podcast

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/shows/:show.rss`

RSS feed of a specific show.

#### Path Parameters

| Name | Type   | Description                            |
| ---- | ------ | -------------------------------------- |
| show | string | Slug name for the show being requested |

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 RSS feed, with iTunes extensions." %}

```markup
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
  xmlns:atom="http://www.w3.org/2005/Atom" 
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
  <channel>
    <title>No Magic - BFF.fm</title>
    <description>No Magic with Ben Ward on BFF.fm. Listen to show archives, or tune in live Tuesday 8:00 – 10:00pm. BFF.fm is a San Francisco-based community radio station. Our mission is to support emerging and underground artists and bring the Bay Area music scene to the world.</description>
    <itunes:summary><![CDATA[<p>An evening session with&nbsp;<a href="https://bff.fm/people/benward">Ben Ward</a> playing eclectic blends of pop, rock, electronic, dance and whatever else seems tangentially appropriate. A featured guest brings along their musical inspirations and stories, and we'll pour over the record of the week. <i>“This isn't about looking good.&nbsp;This isn't about making people like you.&nbsp;No magic, just music.”</i></p>]]></itunes:summary>
    <link>https://bff.fm/shows/nomagic</link>
    <atom:link href="https://data.bff.fm/shows/nomagic.rss" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sun, 31 Mar 2019 16:50:16 +0000</lastBuildDate>
    <pubDate>Sun, 31 Mar 2019 16:50:16 +0000</pubDate>
    <language>en-us</language>
    <copyright>Copyright © 2019 BFF.fm</copyright>

    <image>
      <url>https://a.bff.fm/image/itunes/No_Magic_3.jpg</url>
      <link>https://bff.fm/shows/nomagic</link>
      <title>No Magic - BFF.fm</title>
    </image>
    <itunes:image href="https://a.bff.fm/image/itunes/No_Magic_3.jpg" />

    <itunes:owner>
      <itunes:name>BFF.fm</itunes:name>
      <itunes:email>podcasts@bff.fm</itunes:email>
    </itunes:owner>

    <atom:author>
      <atom:name>Ben Ward</atom:name>
      <atom:uri>https://bff.fm/people/benward</atom:uri>
    </atom:author>
    <itunes:author>BFF.fm / Ben Ward</itunes:author>

    <itunes:explicit>yes</itunes:explicit>
    <itunes:category text="Music" />

    <item>
      <link>https://bff.fm/broadcasts/17865</link>
      <guid isPermaLink="false">tag:bff.fm,2019-03-26:/broadcasts/17865</guid>
      <pubDate>Tue, 26 Mar 2019 20:00:00 +0000</pubDate>

      <title>#13: From the East</title>
      <itunes:title>From the East</itunes:title>

      <itunes:episodeType>full</itunes:episodeType>
      <itunes:episode>13</itunes:episode>
      <enclosure url="https://a.bff.fm/audio/nomagic/NoMagic-13.mp3" length="232918004" type="audio/mpeg" />

      <description><![CDATA[<p>This week's show was recorded by Ben in a hotel room in Minsk, Belarus. It's a solo effort, packed full of new music and features the really wonderful new album from&nbsp;<b>The Cinematic Orchestra<i></i></b><i></i>;&nbsp;<i>To Belong&nbsp;</i>is a great record, supported by really excellent vocal collaborations with the likes of <b>Moses Sumney</b> and <b>Roots Manuva</b>. Enjoy!</p>
      <p><strong><a href="https://bff.fm/broadcasts/17865#support">Enjoying the show? Please support BFF.FM with a donation.</a></strong></p>
      <section itemscope itemtype="https://schema.org/MusicPlaylist">
      <h3 itemprop="name">Playlist</h3>
      <ol>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:00:00+00:00">0′00″</time><strong itemprop="recordingOf">Where We&#039;re Calling From</strong> by <strong itemprop="byArtist">Doves</strong> on <span itemprop="inAlbum">The Last Broadcast</span> (<span itemprop="publisher">Heavenly</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:01:27+00:00">1′27″</time><strong itemprop="recordingOf">Lights Out For Darker Skies</strong> by <strong itemprop="byArtist">British Sea Power</strong> on <span itemprop="inAlbum">Do You Like Rock Music</span> (<span itemprop="publisher">Rough Trade</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:07:59+00:00">7′59″</time><strong itemprop="recordingOf">Dream Variations</strong> by <strong itemprop="byArtist">Idlewild</strong> on <span itemprop="inAlbum">Interview Music</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:15:06+00:00">15′06″</time><strong itemprop="recordingOf">Bellyache</strong> by <strong itemprop="byArtist">Yak</strong> on <span itemprop="inAlbum">Pursuit of Momentary Happiness</span> (<span itemprop="publisher">Universal</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:18:46+00:00">18′46″</time><strong itemprop="recordingOf">My Mouth Ain&#039;t No Bible</strong> by <strong itemprop="byArtist">James Yorkston</strong> on <span itemprop="inAlbum">The Route To The Harmonium</span> (<span itemprop="publisher">Domino</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:25:25+00:00">25′25″</time><strong itemprop="recordingOf">Strange Secrets Worth Knowing</strong> by <strong itemprop="byArtist">Improvement Movement</strong> on <span itemprop="inAlbum">Strange Secrets Worth Knowing</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:27:25+00:00">27′25″</time><strong itemprop="recordingOf">Chain of Being</strong> by <strong itemprop="byArtist">Crows</strong> on <span itemprop="inAlbum">Chain of Being</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:35:49+00:00">35′49″</time><strong itemprop="recordingOf">A Caged Bird/Imitations of Life (feat. Roots Manuva)</strong> by <strong itemprop="byArtist">The Cinematic Orchestra</strong> on <span itemprop="inAlbum">A Caged Bird/Imitations of Life (feat. Roots Manuva)</span> (<span itemprop="publisher">Ninja Tune</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:42:39+00:00">42′39″</time><strong itemprop="recordingOf">First of the Tide (feat. Benge)</strong> by <strong itemprop="byArtist">Erland Cooper</strong> on <span itemprop="inAlbum">Sule Skerry</span> (<span itemprop="publisher">Phases</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:45:56+00:00">45′56″</time><strong itemprop="recordingOf">Willow (feat. Robert Pattinson)</strong> by <strong itemprop="byArtist">Tindersticks</strong> on <span itemprop="inAlbum">“High Life” OST</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T03:53:59+00:00">53′59″</time><strong itemprop="recordingOf">Zero One/This Fantasty (feat. Grey Reverend)</strong> by <strong itemprop="byArtist">The Cinematic Orchestra</strong> on <span itemprop="inAlbum">To Believe</span> (<span itemprop="publisher">Ninja Tune</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:00:50+00:00">60′50″</time><strong itemprop="recordingOf">Home (feat. Tina Dico)</strong> by <strong itemprop="byArtist">Zero 7</strong> on <span itemprop="inAlbum">When it Falls</span> (<span itemprop="publisher">New State</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:05:15+00:00">65′15″</time><strong itemprop="recordingOf">Bats in the Attic</strong> by <strong itemprop="byArtist">Jon Hopkins and King Creosote</strong> on <span itemprop="inAlbum">Diamond Mine</span> (<span itemprop="publisher">Domino</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:08:38+00:00">68′38″</time><strong itemprop="recordingOf">One by One</strong> by <strong itemprop="byArtist">Dana Gavanski</strong> on <span itemprop="inAlbum">One by One</span> (<span itemprop="publisher">Full Time Hobby</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:17:27+00:00">77′27″</time><strong itemprop="recordingOf">Ladies and Gentlemen</strong> by <strong itemprop="byArtist">Bronx Slang</strong> on <span itemprop="inAlbum">Bronx Slang</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:20:14+00:00">80′14″</time><strong itemprop="recordingOf">Rubber Bullets</strong> by <strong itemprop="byArtist">Clinic</strong> on <span itemprop="inAlbum">Rubber Bullets</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-27T04:22:35+00:00">82′35″</time><strong itemprop="recordingOf">Out of Body</strong> by <strong itemprop="byArtist">The Years</strong> on <span itemprop="inAlbum">Out of Body</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-28T04:28:44+00:00">88′44″</time><strong itemprop="recordingOf">A Promise (feat. Heidi Vogel)</strong> by <strong itemprop="byArtist">The Cinematic Orchestra</strong> on <span itemprop="inAlbum">To Believe</span> (<span itemprop="publisher">Ninja Tune</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-28T04:40:10+00:00">100′10″</time><strong itemprop="recordingOf">In The Dark (feat. Toulouse)</strong> by <strong itemprop="byArtist">Anaïs</strong> on <span itemprop="inAlbum">Lost my Faith</span> (<span itemprop="publisher">Universal</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-28T04:44:13+00:00">104′13″</time><strong itemprop="recordingOf">Summer Blues</strong> by <strong itemprop="byArtist">Will Burns and Hannah Peel</strong> on <span itemprop="inAlbum">Chalk Hill Blue</span> (<span itemprop="publisher">Rivertones</span>)</li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-28T04:51:57+00:00">111′57″</time><strong itemprop="recordingOf">Sleep</strong> by <strong itemprop="byArtist">Son Lux</strong> on <span itemprop="inAlbum">Remnants</span></li>
      <li itemprop="track" itemscope itemtype="https://schema.org/MusicRecording">
      <time datetime="2019-03-28T04:56:27+00:00">116′27″</time><strong itemprop="recordingOf">Tutti</strong> by <strong itemprop="byArtist">Cosey Fanni Tutti</strong> on <span itemprop="inAlbum">TUTTI</span></li>
      </ol>
      </section>]]></description>
    </item>
  </channel>
</rss>
```

{% endtab %}
{% endtabs %}

## All Shows Index

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/shows/all.opml`

OPML outline for all shows on BFF.fm, linking to respective RSS feeds.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 OPML outline of all BFF.fm shows (truncated.)" %}

```markup
<?xml version="1.0" encoding="utf-8" ?>
<opml version="2.0">
  <head>
    <title>Programs - BFF.fm</title>
    <dateCreated>Sun, 31 Mar 19 16:58:37 +0000</dateCreated>
    <ownerName>BFF.fm</ownerName>
    <ownerId>https://bff.fm</ownerId>
  </head>
  <body>
    <outline text="feeds">
      <outline type="rss" text="@indierockgirl radio" xmlUrl="https://data.bff.fm/shows/indierockgirl-radio.rss" htmlUrl="https://bff.fm/shows/indierockgirl-radio" category="Garage" />
      <outline type="rss" text="@Jon_Digital" xmlUrl="https://data.bff.fm/shows/jon-digital.rss" htmlUrl="https://bff.fm/shows/jon-digital" category="Pop,R&amp;B / Soul,Electronic" />
      <outline type="rss" text="A Thick Mist" xmlUrl="https://data.bff.fm/shows/a-thick-mist.rss" htmlUrl="https://bff.fm/shows/a-thick-mist" category="World,Rock,Experimental,Electronic" />
      <outline type="rss" text="Abuela&#039;s Pantry" xmlUrl="https://data.bff.fm/shows/abuela-s-pantry.rss" htmlUrl="https://bff.fm/shows/abuela-s-pantry" category="Local,Pop" />
      <!-- … -->
    </outline>
  </body>
</opml>
```

{% endtab %}
{% endtabs %}

## Schedule Index

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/shows/scheduled.opml`

OPML outline including all shows that are regularly scheduled.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | String | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200: OK OPML outline of shows scheduled on the specified day." %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Day Index

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/shows/day/:day.opml`

OPML outline for day scheduled show linking to respective RSS feeds.

#### Path Parameters

| Name                                  | Type   | Description                                                                                                              |
| ------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------ |
| day<mark style="color:red;">\*</mark> | String | Name of the schedule day to return. One of `monday` , `tuesday`, `wednesday`, `thursday`, `friday`, `saturday`, `sunday` |

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | String | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200: OK OPML outline of shows scheduled on the specified day." %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Podcasts Index

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/shows/podcasts.opml`

OPML outline for all Podcasts in the BFF.fm Podcast Network.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | String | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200: OK OPML outline of shows scheduled on the specified day." %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}


# Now Playing

## Unified Metadata

## On Air

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/onair/now.json`

An endpoint which will return what's currently playing on BFF.fm at the finest fidelity available: the track, or current playing show.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | String | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200: OK " %}
Example Track response

```
{
   title: I NEED YOU TO (BREONNA TAYLOR)
   attribution: Tobe Nwigwe
   collection: THE PANDEMIC PROJECT
   licensor: Self Released
   image: https://a.bff.fm/…/album.jpg
   url: https://bff.fm/broadcasts/234345324
   type: track
}
```

Example Show response

```
{
   title: No Magic
   attribution: Ben Ward
   collection: BFF.fm
   licensor: BFF.fm
   image: https://a.bff.fm/…/logo.jpg
   url: https://bff.fm/shows/nomagic
   type: show
}
```

{% endtab %}
{% endtabs %}

## Track Metadata

## Detailed Metadata

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/tracks/detail.text`

What's currently playing on the BFF.fm stream.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 Cake successfully retrieved." %}

```
Title: There Goes The Fear
Artist: Doves
Album: The Last Broadcast
Label: Heavenly
Artwork: https://a.bff.fm/image/original/trs2.jpg
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
See Also: [Audio Hijack Pro's “Now Playing.txt” documentation](https://rogueamoeba.com/support/knowledgebase/?showArticle=AHBroadcastNotes#nowplayingfile).
{% endhint %}

## One-Line Summary

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/tracks/now.text`

A single-line summary of what's playing on BFF.fm. `Track Name` followed by `Artist`, separated by `-`.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 " %}

```
Because It's Not Love (But It's Still A Feeling) - The Pipettes
```

{% endtab %}
{% endtabs %}

## JSON structured Detailed Metadata

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/api/data/tracks/now.json`

The current artist, track, album and record label being played on BFF.fm

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | String | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |


# Schedules

What's on BFF.fm, and when.

## Full BFF.fm Schedule

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/shows/all.ics`

iCalendar for complete BFF.fm weekly schedule.

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 Cake successfully retrieved." %}

```
BEGIN:VCALENDAR
PRODID:-//Best Frequencies\, Inc//BFF.FM//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-CALNAME;CHARSET=utf-8:No Magic on BFF.fm
X-PUBLISHED-TTL:PT15M
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
DTSTART:20070311T020000
TZNAME:PDT
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
DTSTART:20071104T020000
TZNAME:PST
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:show-237@bff.fm
CLASS:PUBLIC
TRANSP:TRANSPARENT
LAST-MODIFIED:20190331T163606Z
SUMMARY;CHARSET=utf-8:We Let The Hats Decide on BFF.FM
DESCRIPTION;CHARSET=utf-8:DJ super-combo\, DJ Sanspants and DJ Pants\, write weird things down on pieces of paper. Those pieces of paper get folded up and placed into a super combination of hats\, fez and cowboy. We each pick pieces of paper out of those respective hats and whatever combination of words and phrases gets picked becomes the theme of the episode. It'll get wacky\, we promise.&nbsp\;\n\n
LOCATION:San Francisco\, CA
URL:https://bff.fm/shows/we-let-the-hats-decide
ORGANIZER;CN=BFF.FM:MAILTO:calendar@data.bff.fm
DTSTAMP:20190404T130000Z
DTSTART;TZID=America/Los_Angeles:20190404T060000
DTEND;TZID=America/Los_Angeles:20190404T080000
RRULE:FREQ=WEEKLY
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Tune-in to BFF.FM for We Let The Hats Decide!
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
UID:show-330@bff.fm
CLASS:PUBLIC
TRANSP:TRANSPARENT
LAST-MODIFIED:20190331T163606Z
SUMMARY;CHARSET=utf-8:World of Echo on BFF.FM
DESCRIPTION;CHARSET=utf-8:
LOCATION:San Francisco\, CA
URL:https://bff.fm/shows/world-of-echo
ORGANIZER;CN=BFF.FM:MAILTO:calendar@data.bff.fm
DTSTAMP:20190401T140000Z
DTSTART;TZID=America/Los_Angeles:20190401T070000
DTEND;TZID=America/Los_Angeles:20190401T080000
RRULE:FREQ=WEEKLY
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Tune-in to BFF.FM for World of Echo!
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
// …
END:VEVENT
END:VCALENDAR
```

{% endtab %}
{% endtabs %}

## Single Day Schedule

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/shows/index/:day.ics`

iCalendar schedule for a single day of BFF.fm broadcasts.

#### Path Parameters

| Name | Type   | Description                                                                                                 |
| ---- | ------ | ----------------------------------------------------------------------------------------------------------- |
| :day | string | Day of the week. \`monday\`, \`tuesday\`, \`wednesday\`, \`thursday\`, \`friday\`, \`saturday\`, \`sunday\` |

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 " %}

```
BEGIN:VCALENDAR
PRODID:-//Best Frequencies\, Inc//BFF.FM//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-CALNAME;CHARSET=utf-8:No Magic on BFF.fm
X-PUBLISHED-TTL:PT15M
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
DTSTART:20070311T020000
TZNAME:PDT
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
DTSTART:20071104T020000
TZNAME:PST
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:show-237@bff.fm
CLASS:PUBLIC
TRANSP:TRANSPARENT
LAST-MODIFIED:20190331T163606Z
SUMMARY;CHARSET=utf-8:We Let The Hats Decide on BFF.FM
DESCRIPTION;CHARSET=utf-8:DJ super-combo\, DJ Sanspants and DJ Pants\, write weird things down on pieces of paper. Those pieces of paper get folded up and placed into a super combination of hats\, fez and cowboy. We each pick pieces of paper out of those respective hats and whatever combination of words and phrases gets picked becomes the theme of the episode. It'll get wacky\, we promise.&nbsp\;\n\n
LOCATION:San Francisco\, CA
URL:https://bff.fm/shows/we-let-the-hats-decide
ORGANIZER;CN=BFF.FM:MAILTO:calendar@data.bff.fm
DTSTAMP:20190404T130000Z
DTSTART;TZID=America/Los_Angeles:20190404T060000
DTEND;TZID=America/Los_Angeles:20190404T080000
RRULE:FREQ=WEEKLY
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Tune-in to BFF.FM for We Let The Hats Decide!
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
UID:show-330@bff.fm
CLASS:PUBLIC
TRANSP:TRANSPARENT
LAST-MODIFIED:20190331T163606Z
SUMMARY;CHARSET=utf-8:World of Echo on BFF.FM
DESCRIPTION;CHARSET=utf-8:
LOCATION:San Francisco\, CA
URL:https://bff.fm/shows/world-of-echo
ORGANIZER;CN=BFF.FM:MAILTO:calendar@data.bff.fm
DTSTAMP:20190401T140000Z
DTSTART;TZID=America/Los_Angeles:20190401T070000
DTEND;TZID=America/Los_Angeles:20190401T080000
RRULE:FREQ=WEEKLY
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Tune-in to BFF.FM for World of Echo!
ACTION:DISPLAY
END:VALARM
END:VEVENT
BEGIN:VEVENT
// …
END:VEVENT
END:VCALENDAR
```

{% endtab %}
{% endtabs %}

## Specific Show Schedule

<mark style="color:blue;">`GET`</mark> `https://data.bff.fm/shows/:show.ics`

iCalendar for a specific BFF.fm show.

#### Path Parameters

| Name  | Type   | Description           |
| ----- | ------ | --------------------- |
| :show | string | The slug for the show |

#### Query Parameters

| Name    | Type   | Description                                                                                                                                       |
| ------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| app\_id | string | You may include this parameter to identify your app in our stats, so that we can understand who's building cool stuff for BFF.fm and feature you! |

{% tabs %}
{% tab title="200 " %}

```
BEGIN:VCALENDAR
PRODID:-//Best Frequencies\, Inc//BFF.FM//EN
VERSION:2.0
METHOD:PUBLISH
X-WR-CALNAME;CHARSET=utf-8:No Magic on BFF.fm
X-PUBLISHED-TTL:PT15M
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
DTSTART:20070311T020000
TZNAME:PDT
TZOFFSETTO:-0700
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
DTSTART:20071104T020000
TZNAME:PST
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:show-309@bff.fm
CLASS:PUBLIC
TRANSP:TRANSPARENT
LAST-MODIFIED:20190331T163836Z
SUMMARY;CHARSET=utf-8:No Magic on BFF.FM
DESCRIPTION;CHARSET=utf-8:An evening session with&nbsp\;Ben Ward playing eclectic blends of pop\, rock\, electronic\, dance and whatever else seems tangentially appropriate. A featured guest brings along their musical inspirations and stories\, and we'll pour over the record of the week. “This isn't about looking good.&nbsp\;This isn't about making people like you.&nbsp\;No magic\, just music.”\n\n
LOCATION:San Francisco\, CA
URL:https://bff.fm/shows/nomagic
ORGANIZER;CN=BFF.FM:MAILTO:calendar@data.bff.fm
DTSTAMP:20190403T030000Z
DTSTART;TZID=America/Los_Angeles:20190402T200000
DTEND;TZID=America/Los_Angeles:20190402T220000
RRULE:FREQ=WEEKLY
SEQUENCE:0
BEGIN:VALARM
TRIGGER:-PT15M
DESCRIPTION:Tune-in to BFF.FM for No Magic!
ACTION:DISPLAY
END:VALARM
END:VEVENT
END:VCALENDAR
```

{% endtab %}
{% endtabs %}


# Developer Rules

What to know if you're building things with BFF.fm's data and APIs.

At time of writing, BFF.fm's developer platform is emergent and experimental, so these rules are somewhat loose and informal and will develop over time along with the station's technology itself. If you have any questions, please Tweet to @bffdotfm or email <tech@bff.fm>.

## In general

* You should use the BFF.fm data and APIs with respect — do not overwhelm our servers or resources.&#x20;
* We will not support the use of our data and content in projects that seek to or enable the harm of others.
* Please credit BFF.fm appropriately in your applications that build on our work.
* Please make use of the `app_id` parameter is requests to our API with a reverse URI form (e.g. `com.example.bff.app`  so that we may understand who is making use of our endpoints. Drop us a message to @bffdotfm on Twitter or <tech@bff.fm> if you want to identify yourselves! (In future, we'll consider a more formal system for this.)

## Data Licensing

At time of writing we have not applied an explicit license to our data. We are considering an appropriate way to share this data with the community, but for the time being, please contact us if you want to discuss specifics.

## Disclaimer

{% hint style="danger" %}
The BFF.fm developer platform and APIs are provided "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall BFF.fm or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
{% endhint %}


# Code of Conduct

A community code of conduct that we ask of anyone contributing to our development and open source projects.

Just as with our on-air community, BFF.fm is committing to providing a safe, and friendly envionment for technical contributions.

This Code of Conduct outlines our expectations for participants in our community. We require that everyone abide by this Code when contributing to and collaborating on BFF.fm technical projects.

Open source software  powers streaming radio stack all across the web, and has been a vital and integral part of BFF.fm's operation since the very start. BFF.fm, our staff, and volunteers aspire to be positive contributors to the wider internet radio community. We're committed to providing a friendly, safe, and welcoming environment for all participants, and we expect everyone to treat each other with respect and courtesy.

### &#x20;Expectations

* Treat others with dignity and respect.
* Refrain from demeaning or discriminatory behavior and speech.
* Be mindful of your surroundings and of your fellow participants.
* Alert BFF.fm staff and/or volunteers if you notice a dangerous situation or someone in distress.

### How we handle unacceptable behavior

Unacceptable behavior includes intimidating, harassing, abusive, discriminatory, derogatory or demeaning conduct in BFF.fm community spaces, and the spaces of projects that BFF.fm hosts, or is involved in.

Unacceptable behavior will not be tolerated. If someone is deemed to be acting in an unacceptable manner, we will take any action deemed appropriate to support and ensure the safety of our community, including removal or exclusion of indivuduals from BFF.fm projects.

If you are subject to unacceptable behavior, or notice that someone else is being subject to unacceptable behavior, or have any other concerns, please notify a volunteer or BFF.fm Technical Comittee member as soon as you are able.

{% hint style="info" %}
Please address any questions or enquiries to <tech@bff.fm>&#x20;
{% endhint %}

#### References & further reading

* The [Twitter developer community code of conduct](https://developer.twitter.com/en/community/code-of-conduct).


