You also find this documentation and a printable PDF at github.

fyyd api

Documentations version: 0.10 (2018-02-13)

fyyd logo


This is the documentation for the API to fyyd, the podcast search engine, directory and slow cooker.

Take my apologies for this simple markdown, I tried to use something more fancy, but I took an arrow to my knee.

Please be aware: This version is most likely to change in the very near future. It's my first kind of that API and I'm still learning how to do things the more or less correct way. All that works and all that is fine, but it may not be optimal. I want it to be at least near to optimal.

Version 0.2 is now fixed and nailed to the wall. What does that mean? It means, that requests, parameters and responses won't change for that version and applications and scripts will not face substantial modifications, rendering them inoperabel. What will happen though, is that requests and parameters will be added and additional data inside responses will occur, as long as these changes don't touch functionality.

Bugs or inconsistencies, flaws and so on will stay forever with v0.2, but may be addressed by additional requests or responses. Whatever I learn with this version will find it's way into 0.3 or whatever I'll number the next substantial release.

 

Endpoint for version 0.2

https://api.fyyd.de/0.2/

always prefix this for every request or else you'll end up in version 0.1 which is mostly different from 0.2.


Table of contents

  1. Preface
  2. Authorization
  3. Error Handling
  4. Account
  5. User
  6. Action
  7. Podcast
  8. Episode
  9. Curations
  10. Collections
  11. Search
  12. 3rd party interfaces

Preface

Podcasts and their metadata always has been a fascinating subject for me. So much data, so few approaches to collect and bring it to good use.

Now it's 2017 and there are a few (I know of three, maybe four) more or less experimental projects to work with this gigantic loads of data. One of that projects is fyyd, my attempt to create a

  • podcast search engine
  • podcast directory
  • podcast recommendation system

fyyd is a freetime project, that get's some love now and then. The progress is as fast as I can afford some free time beside family, job and whatever one has to do.

As I started fyyd, I knew that an API would be crucial for this project to escape the scope of just a webpage and to find more stunning ways to do whatever one can do with that data. As always: The crowd will find a way to use the data you would never have dreamed of.

Version 0.1 of that API found it's way to a small group of developers, leading into the development of Skoon, an iOS-App to curate podcast's episodes directly from some podcatchers and the integration of fyyd into podcat, a lovely designed podcatcher that pleasantly differs from most machine like user interfaces.

Version 0.1 had its problems and was a rush job. Thanks to Jeanette and Stefan here and now you see the documentation for version 0.2.

Thanks to all who helped, will help and contribute to this small project.


 

Authorization

Authorization for 3rd party apps and services is provided with an oauth2 interface. At the moment this is a little bit rudimentary, but working.

 

App registration

First step is to register your app at fyyd.de. At the time of writing this documentation (2017-04-17), you have to be a registered developer at fyyd. This is not as a big deal as it might sound, but I'd like to know, who is using auth with the API and what happens. Just register an account at fyyd.de and give me a short note that you'd like to use the API via mail.

When this is done, head to https://fyyd.de/dev/app/ to create the app's registration at fyyd.

You then create the credentials and maybe an accesstoken (which only works on app context, which is non existent at this time).

 

Auth workflow

user context

Head your client to https://fyyd.de/oauth/authorize?client_id=XYZ where client_id is your client's id (wow… ;)

The user logs in (if neccessary) and authorizes the app.

fyyd now redirects to your registered app's callback-URL, appending the token via #token=ACCESSTOKEN.

In all future requests, add an authorization header:

Authorization: Bearer ACCESSTOKEN

app context

The authorization for application only level is working, but there is no use-case for that at the moment.

The most simple way would to create the accesstoken directly at the developers page at fyyd. You may also send a POST request to https://fyyd.de/oauth/token, containing

grant_type=client_credentials

inside the body.

Additionally you need to either set

an Authorization Header like

Authorization: Basic base64encode($client_id:$client_secret)

(please: base64encode has to be calculated and not included in the headers…)

or added as

&client_id=$client_id&client_secret=$client_secret

in the requests body.

 


 

Error Handling

In case an error occurs, the API repsonses with an appropriate HTTP status code and, in case it's not a 404, a more or less helpful msg along inside a JSON object.

What could possibly go wrong? Here are some examples:

Examples

Missing authorization

 

 

Doing smth really forbidden

 

 

Missing parameter

 

Unknown resource

 

 

Account

Requests for /account always refer to the user identified by the accesstoken. Thus, you of course need to authenticate to use this requests. All other requests are free until now.

 

[GET /account/info]

Description

Returns general information about the account

Parameters

none

Authorization

required

Response

 

 

[GET /account/curations]

Description

Returns this account's curations. Includes non-public curations as well.

Parameters

none

Authorization

required

Response

 

 

[GET /account/collections]

Description

Returns this account's collections.

Parameters

none

Authorization

required

Response

 

 

User

Gets public available information about a registered account at fyyd

 

[GET /user]

Description

Retrieves the accounts profile information

Parameters

  • user_id (required, int) the users account id
  • or nick (optional, string) identifies the user by nick

Response

 

[GET /user/curations[/episodes]]

Description

Retrieves the curations maintained by the given user. You may append /episodes to also get the content of this curations. If you're authenticated and you request your own curations, non-public curations will be included also.

Parameters

  • user_id (required, int) the users account id
  • or nick (optional, string) identifies the user by nick

Response

 

[GET /user/collections[/podcasts]]

Description

Retrieves the collections maintained by the given user. You may append /podcasts to also get the content of this collections.

Parameters

  • user_id (required, int) the users account id
  • or nick (optional, string) identifies the user by nick

Response

 

 

Action

This is the actions API to fyyd. It's a more or less formfree key-value-store.

Requests for /action always refer to the user identified by the accesstoken and the used app.

[POST /action]

Description

Saves an action for the authorized user.

The action always referes to an object inside fyyd's database, which may be:

  • an episode
  • a podcast
  • a curation
  • a collection
  • a user

The action itself is represented by a string you may choose freely. Some of these actions will be used in future features of fyyd. This is not implemented at the time this documentation is written.

Authorization

required

Parameters

  • object_id (required, int) the id of the object
  • object_type (required, string) the type of the object. episode, podcast, curation, collection, user
  • action (required, string) a free to choose action
  • metadata (optional, string) further data you'd like to associate to this action

Response

Returns 204 - No Content

 

[POST /action/delete]

Description

Deletes an action for the authorized user.

Authorization

required

Parameters

  • action_id (required, int) the id of the action

Response

Returns 204 - No Content

 

[GET /action]

Description

Gets all actions for the authorized user, triggered by the authorized app and filtered by the given criteria.

Authorization

required

Parameters

  • object_id (optional, int) the id of the object
  • object_type (optional, string) the type of the object. episode, podcast, curation, collection, user
  • action (optional, string) a free to choose action
  • metadata (optional, string) further data you'd like to associate to this action
  • date_start (optional, date string) optional start date for this query
  • date_end (optional, date string) optional end date for this query

Choose one or more of these parameters. Providing none of them returns all actions issued by the logged in user with the authorized app.

Response

 

 

Podcast

Retrieves information about a podcast

[GET /podcast/[/episodes]]

Description

Gets information about the podcast with id {id}. You may retrieve the episodes by appending /episodes.

Additionally you can address the resultset with {page} and {count}.

Parameters

  • podcast_id (required, int) the podcast's id
  • or podcast_slug (alternative, string) the podcast's slug
  • page (optional, int) the page you want to address, default: 0
  • count (optional,int) the page's size, default: 50

Response

 

 

[GET /podcast/season]

Description

Gets episodes from a season of a podcast with id {podcast_id}.

Additionally you can address the resultset with {page} and {count}.

Parameters

  • podcast_id (required, int) the podcast's id
  • or podcast_slug (alternative, string) the podcast's slug
  • season_number (required, int) the seasons number
  • episode_number (optional, int) an episodes number to retrieve
  • page (optional, int) the page you want to address, default: 0
  • count (optional,int) the page's size, default: 50

Response

 

[POST /podcast/action]

Description

Performes an action to a podcast owned by you (see claim-button on every podcast page).

At the moment, 'check' is the only action to perform. This triggers an update within the next poll cycle.

Authorization

required

Parameters

  • podcast_id (required, int) the podcast's id

  • or podcast_slug (alternative, string) the podcast's slug

  • action (required, string) the action to perform:

    • check

Response

returns a 204: No Content

 

[GET /podcasts]

Description

Gets information about all podcasts within fyyd.

Additionally you can address the resultset with {page} and {count}.

Please note that this request is the plural form of podcast, podcasts ;-)

Parameters

  • page (optional, int) the page you want to address, default: 0
  • count (optional,int) the page's size, default: 50

Response

The response includes data about the pagination.

 

Additionally links inside the header are provided:

Link: <https://api.fyyd.de/0.2/podcasts/1/2>; rel="next", <https://api.fyyd.de/0.2/podcasts/0/2>; rel="first", <https://api.fyyd.de/0.2/podcasts/7094/2>; rel="last"

 

[GET /categories]

Description

Gets the complete categories tree

Parameters

none

Response

 

 

[GET /category]

Description

Retrieves the podcasts inside the specified category. The categories system referres to Apple's iTunes Categories. Categories not in Apple's specification are ignored on import.

Parameters

  • category_id (required, int) the category's id (see /categories)
  • page (optional, int) the page you want to address, default: 0
  • count (optional,int) the page's size, default: 50

Response

 

 

[GET /podcast/recommend]

Description

Gets information about what fyyd thinks, might be a good idea to listen to also. At the moment, this is based on collections information.

Parameters

  • podcast_id (required, int) the Podcast's id
  • or podcast_slug (alternative, string) the podcast's slug
  • count (optional,int) the number of recommended podcasts, default: 10

Response

 

 

[GET /podcast/latest]

Description

Returns information about the last added podcasts. Provide a count and/or an ID to be the starting point.

Parameters

  • since_id (optional, int) the last podcast's id you know of. Get the podcasts added after that ID. Maximum: 1000 episodes.
  • count (optional, int, default: 20) get the latest count nums of podcasts.

Response

 

[GET /podcast/collections]

Description

Returns information about the collections this podcast is collected in.

Parameters

  • podcast_id (required, int) the Podcast's id
  • or podcast_slug (alternative, string) the podcast's slug
  • count (optional,int) the number of recommended podcasts, default: 10
  • page (optional,int) the page of the result, default: 0

Response

 

 


 

Episode

Request to retrieve an episode's information

[GET /episode]

Description

Returns information about a single episode

Parameters

  • episode_id (required, int) the episode's id

Response

 

[GET /episode/latest]

Description

Returns information about the last added episodes. Provide a count and/or an ID to be the starting point.

Parameters

  • since_id (optional, int) the last episode's id you know of. Get the episodes added after that ID. Maximum: 1000 episodes.
  • count (optional, int, default: 20) get the latest count nums of episodes.

Response

 

 

[GET /episode/curations]

Description

Returns information about the curations this episode is in.

Parameters

  • episode_id (required, int) the episode's id
  • count (optional,int) the number of recommended podcasts, default: 10
  • page (optional,int) the page of the result, default: 0

Response

 

 

Curations

All about Curations inside fyyd. Retrieve and set.

[GET /curation[/episodes]]

Description

Returns information about a single curation, given the curation's id. May append episodes, not paged at the moment. If you're authenticated and you request your own curation, non-public curations will be accessable too.

Authorization

required for getting your own curation, otherwise you only get public curations.

Parameters

  • curation_id (required, int) the curation's id

Response

 

 

[POST /curation]

Description

Creates or modifies a curation.

Authorization

required

Parameters

  • curation_id (opt, int) when set, an existing curation is modified
  • title (req when created, string) the title to set for this curation
  • description (opt, string) the description for this curation
  • slug (opt, string) the slug to set for this curation. If not set while creation, the title will be slugified. When set, but empty while modifying a curation, also a slugified title will overwrite the existing slug.
  • public (opt, int, def: 0) defines, if this curation will be set to public and thus accessable for all.
  • image (opt, binary) upload an optional image for the curation. Use multipart/form-data (RFC 2388) and provide a content-type.

Response

Creating and mofiying a curation returns the complete object of the curation as in GET /curation.

 

[POST /curation/delete]

Description

Deletes a curation. Please note: there's no coming back, no questions, no backup. It's deleted!

Please note also: You cannot delete your very own personal curation, it's tied to your account.

Authorization

required

Parameters

  • curation_id (req, int) the id of the curation you want to delete

Response

returns 204: No content

 

[POST /curate]

Description

Adds OR removes the episode identified by episode_id into the curation identified by curation_id. The curation must be owned by the user identified by the accesstoken. The state of the episode inside this curation toggles with each call, the state is returned inside response's data section.

If you want to enforce a state without knowing what state the episode had before, use force_state.

Authorization

required

Parameters

  • curation_id (required, int) the curation's id
  • episode_id (required, int) the episode's id
  • why (optional, string) a text to indicate, why you curate this episode
  • force_state (optional, bool) enforce adding or removing the episode from the curation

Response

 

[GET /curate]

Description

Retuns the state of the curation of an episode in a curation.

Authorization

required

Parameters

  • curation_id (required, int) the curation's id
  • episode_id (required, int) the episode's id

Response

 

 

[GET /category/curation]

Description

Retrieves the curations inside the specified category. The categories system referres to Apple's iTunes Categories.

Please note: Curations' categories calculate automatically by the podcasts' categories of the curated episodes. In future, those categories also could get set manually by the user if desired. At the moment the categories are calculated and thus could change with every curated episode.

Additionally you can only find public curations with that function.

Parameters

  • category_id (required, int) the category's id (see /categories)
  • page (optional, int) the page you want to address, default: 0
  • count (optional,int) the page's size, default: 50

Response

 

 


 

Collections

This part is all about collections at fyyd. The content part of collections are podcasts.

 

[GET /collection[/podcasts]]

Description

Returns information about a single collection, given the collection's id. May append podcasts, not paged at the moment.

Parameters

  • collection_id (required, int) the collection's id

Response

 

 

[POST /collection]

Description

Creates or modifies a collection.

Authorization

required

Parameters

  • collection_id (opt, int) when set, an existing collection is modified
  • title (req when created, string) the title to set for this collection
  • description (opt, string) the description for this collection
  • slug (opt, string) the slug to set for this collection. If not set while creation, the title will be slugified. When set, but empty while modifying a collection, also a slugified title will overwrite the existing slug.
  • public (opt, int, def: 0) defines, if this collection will be set to public and thus accessable for all.
  • image (opt, binary) upload an optional image for the collection. Use multipart/form-data (RFC 2388) and provide a content-type.

Response

Creating and mofiying a collection returns the complete object of the collection as in GET /collection.

 

[POST /collection/delete]

Description

Deletes a collection. Please note: there's no coming back, no questions, no backup. It's deleted!

Authorization

required

Parameters

  • collection_id (req, int) the ID of the collection you want to delete

Response

returns 204: No content

 

[POST /collect]

Description

Adds OR removes the podcast identified by podcast_id into or from the collection identified by collection_id. The collection must be owned by the user identified by the accesstoken. The status of the podcast inside this collection toggles.

If you want to enforce a state without knowing what state the podcast had before, use force_state.

Authorization

required

Parameters

  • collection_id (required, int) the collection's id
  • podcast_id (required, int) the podcasts's id
  • force_state (optional, bool) enforce adding or removing the podcast from the collection.

Response

 

[GET /collect]

Description

Retuns the state of the collection of a podcast in a collection.

Authorization

required

Parameters

  • collection_id (required, int) the collection's id
  • podcast_id (required, int) the podcast's id

Response

 

 


 

 

Search

This request is the only one in this section for now. The search API will grow in the near future, drafts are already written on how to manage this important part of fyyd's API.

[GET /search/episode]

Description

This request tries to find an episode inside fyyd's database, matching any or some of a set of given criteria.

This reflects Skoon's need to find an episode's id to add to the user's curation.

Parameters

  • title (optional, string) the episode's title. Search might use parts of the string to find the episode.
  • guid (optional, string) the episode's GUID as stated inside the podcasts feed.
  • podcast_id (optional, int) the podcast's id in fyyd's database.
  • podcast_title (optional, string) the podcast's title. Search might use parts of the string to find the podcast.
  • pubdate (optional, string) the pubDate as stated inside the podcasts feed.
  • duration (optional, int) the duration of the episode in seconds.
  • url (optional, string) the episode's url as stated inside the podcast's feed.
  • term (optional,string) a search term to find inside the episodes.

Please note: title, guid, pubdate, duration, url and term add episodes together. Think of a logical OR.

In contrast to that, podcast_id and podcast_title restrict all episodes to podcasts matching to one of podcast_id or podcast_title.

  • count (optional, int, default: 10)

Response

 

 

[GET /search/podcast]

Description

This request tries to find a podcast inside fyyd's database, matching any or some of a set of given criteria.

Parameters

  • title (optional, string) the podcasts's title. Search might use parts of the string to find the podcast.
  • url (optional, string) the podcast's url as stated inside the podcast's feed.
  • term (optional,string) a search term to find inside the podcast.

Please note: title, url and term add episodes together. Think of a logical OR.

  • count (optional, int, default: 10)

Response

{
  "status": 1,
  "msg": "ok",
  "meta": {
      "API_INFO": {
          "API_VERSION": 0.2
      }
  },
  "data": [
      {
          "title": "Freak Show",
          "id": 85,
          "xmlURL": "https:\/\/feeds.metaebene.me\/freakshow\/m4a",
          "htmlURL": "http:\/\/freakshow.fm",
          "imgURL": "http:\/\/freakshow.fm\/wp-content\/cache\/podlove\/04\/662a9d4edcf77ea2abe3c74681f509\/freak-show_original.jpg",
          "status": 390,
          "slug": "freak-show",
          "layoutImageURL": "https:\/\/img.fyyd.de\/pd\/layout\/85.jpg",
          "thumbImageURL": "https:\/\/img.fyyd.de\/pd\/thumbs\/85.png",
          "microImageURL": "https:\/\/img.fyyd.de\/pd\/micro\/85.png",
          "language": "de",
          "lastpoll": "2017-04-16 00:36:29",
          "generator": "Podlove Podcast Publisher v2.5.0.build315",
          "categories": [
                  52,
                  61
              ],
          "lastpub": "2017-04-13 02:03:27",
          "rank": 32,
          "url_fyyd": "https:\/\/fyyd.de\/podcast\/85",
          "description": "Die muntere Talk Show um Leben mit Technik, das Netz und Technikkultur. Bisweilen Apple-lastig aber selten einseitig. Wir leben und lieben Technologie und reden dar\u00fcber. Mit Tim, hukl, roddi, Clemens und Denis. Freak Show hie\u00df irgendwann mal mobileMacs.",
          "subtitle": "Menschen! Technik! Sensationen!"
      },
      {
          "title": "Timmy Trumpet \u2013 Freak Show",
          "id": 36645,
          "xmlURL": "http:\/\/timmytrumpet.podtree.com\/feed\/podcast",
          "htmlURL": "http:\/\/timmytrumpet.podtree.com",
          "imgURL": "http:\/\/media2-timmytrumpet.podtree.com\/media\/itunes_image\/FreakShow_Radio_1400x1400.jpg",
          "status": 304,
          "slug": "timmy-trumpet-freak-show",
          "layoutImageURL": "https:\/\/img.fyyd.de\/pd\/layout\/36645.jpg",
          "thumbImageURL": "https:\/\/img.fyyd.de\/pd\/thumbs\/36645.png",
          "microImageURL": "https:\/\/img.fyyd.de\/pd\/micro\/36645.png",
          "language": "en",
          "lastpoll": "2017-04-17 03:58:39",
          "generator": "https:\/\/wordpress.org\/?v=4.5.2",
          "categories": 38,
          "lastpub": "2016-06-27 00:30:17",
          "rank": 0,
          "url_fyyd": "https:\/\/fyyd.de\/podcast\/36645",
          "description": "Australia\u2019s #1 DJ \/ Multi-Platinum selling artist Timmy Trumpet presents a weekly mix of the hottest tracks, bootlegs, mashups and more! Put your headphones on and turn the world off. Subscribe now.\ntimmytrumpet.com\nfb.com\/timmytrumpet\nTwitter.com\/timmytrumpet",
          "subtitle": "Timmy Trumpet - Freak Show\u2028"
      }
  ]
}

[GET /search/curation]

Description

This request tries to find a curation inside fyyd's database, matching any or some of a set of given criteria.

Parameters

  • category_id (optional, int) the id of a podcast category that this curation belongs to
  • term (optional,string) a search term to find inside the curation.
  • count (optional, int, default: 10)

Response

{
    "status": 1,
    "msg": "ok",
    "meta": {
        "API_INFO": {
            "API_VERSION": 0.2
        }
    },
    "data": [
        {
            "title": "Netzpolitik",
            "id": 623,
            "description": "Vorsicht, k\u00f6nnte Spuren von Netzpolitik enthalten!",
            "layoutImageURL": "https:\/\/img.fyyd.de\/curation\/layout\/623.jpg?et=",
            "thumbImageURL": "https:\/\/img.fyyd.de\/curation\/thumbs\/623.png?et=",
            "smallImageURL": "https:\/\/img.fyyd.de\/curation\/small\/623.jpg?et=",
            "microImageURL": "https:\/\/img.fyyd.de\/curation\/micro\/623.png?et=",
            "public": 1,
            "slug": "netzpolitik",
            "user_id": 1000,
            "type": 1,
            "categories": [
                52,
                39,
                27
            ],
            "url": "https:\/\/fyyd.de\/user\/eazy\/curation\/netzpolitik",
            "xmlURL": "https:\/\/feeds.fyyd.de\/eazy\/netzpolitik"
        },
        {
            "title": "Empfehlungen von chkpnt",
            "id": 649,
            "description": "Von mir f\u00fcr gut befundene Podcastfolgen.",
            "layoutImageURL": "https:\/\/img.fyyd.de\/curation\/layout\/649.jpg?et=",
            "thumbImageURL": "https:\/\/img.fyyd.de\/curation\/thumbs\/649.png?et=",
            "smallImageURL": "https:\/\/img.fyyd.de\/curation\/small\/649.jpg?et=",
            "microImageURL": "https:\/\/img.fyyd.de\/curation\/micro\/649.png?et=",
            "public": 1,
            "slug": "public",
            "user_id": 1122,
            "type": 1,
            "categories": [
                52,
                55,
                39
            ],
            "url": "https:\/\/fyyd.de\/user\/chkpnt\/curation\/public",
            "xmlURL": "https:\/\/feeds.fyyd.de\/chkpnt\/public"
        }
    ]
}

[GET /search/user]

Description

This request tries to find users based on nick and/or fullname.

Parameters

  • nick (optional, string) a nick or part of it
  • fullname (optional,string) a full name or part of it
  • count (optional, int, default: 10)

Response

{
    "status": 1,
    "msg": "ok",
    "meta": {
        "API_INFO": {
            "API_VERSION": 0.2
        }
    },
    "data": [
       {
            "nick": "funkenstrahlen",
            "id": 1084,
            "fullname": "Stefan Trauth",
            "bio": "Podcasting, Netzpolitik, Development. Alles was mir so begegnet eben.",
            "url": null,
            "layoutImageURL": "https:\/\/img.fyyd.de\/user\/layout\/1084.jpg?et=877005a911b519ff36265925146c12d7",
            "thumbImageURL": "https:\/\/img.fyyd.de\/user\/thumbs\/1084.png?et=877005a911b519ff36265925146c12d7",
            "smallImageURL": "https:\/\/img.fyyd.de\/user\/small\/1084.jpg?et=877005a911b519ff36265925146c12d7",
            "microImageURL": "https:\/\/img.fyyd.de\/user\/micro\/1084.png?et=877005a911b519ff36265925146c12d7"
        },
       {
            "nick": "eazy",
            "id": 1000,
            "fullname": "Christian Bednarek",
            "bio": "Ich bin's nur, der Christian!",
            "url": "https:\/\/fyyd.de\/",
            "layoutImageURL": "https:\/\/img.fyyd.de\/user\/layout\/1000.jpg?et=88e5b04ddcc4c2c059aabefd84d15039",
            "thumbImageURL": "https:\/\/img.fyyd.de\/user\/thumbs\/1000.png?et=88e5b04ddcc4c2c059aabefd84d15039",
            "smallImageURL": "https:\/\/img.fyyd.de\/user\/small\/1000.jpg?et=88e5b04ddcc4c2c059aabefd84d15039",
            "microImageURL": "https:\/\/img.fyyd.de\/user\/micro\/1000.png?et=88e5b04ddcc4c2c059aabefd84d15039"
        }
    ]
}

 

3rd party interfaces

As this API grows over time, others have made great effords to create implementations for several languages and systems.

 

FyydKit

FyydKit is an implementation for Apple's swift. Stefan Trauth created it while developing Skoon, an iOS app for browsing and administrating fyyd's curations. FyydKit is up to date with the API's v0.2.

 

fyydAPI

fyydAPI is another switft implemenation but for v0.1. Jeanette Müller created it for her great podcatcher Podcat. You can manage and browse your curations and collections inside podcat.

 

fyyd_ex

fyyd_ex is an implementation for Elixir. It's WIP at the moment, but looks great to me. Well... I don't have the slightes idea of Elixir, but it really looks great, what optikfluffel (remember superfav.de?) did there :)