{"id":32319479,"url":"https://github.com/breinify/brein-api-library-ios","last_synced_at":"2026-02-20T21:02:46.100Z","repository":{"id":56903973,"uuid":"66325462","full_name":"Breinify/brein-api-library-ios","owner":"Breinify","description":"Breinify's iOS API Library","archived":false,"fork":false,"pushed_at":"2022-09-15T02:01:33.000Z","size":3317,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-01-07T04:04:34.558Z","etag":null,"topics":["analtics","breinify","events","geolocation","holidays","locationservice","reverse-geocoding","temporal-data","timeout","wheather"],"latest_commit_sha":null,"homepage":"https://www.breinify.com","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Breinify.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-23T02:23:46.000Z","updated_at":"2021-11-22T07:30:34.000Z","dependencies_parsed_at":"2022-08-20T18:50:59.452Z","dependency_job_id":null,"html_url":"https://github.com/Breinify/brein-api-library-ios","commit_stats":null,"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/Breinify/brein-api-library-ios","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Breinify%2Fbrein-api-library-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Breinify%2Fbrein-api-library-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Breinify%2Fbrein-api-library-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Breinify%2Fbrein-api-library-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Breinify","download_url":"https://codeload.github.com/Breinify/brein-api-library-ios/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Breinify%2Fbrein-api-library-ios/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29664434,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T19:49:36.704Z","status":"ssl_error","status_checked_at":"2026-02-20T19:44:05.372Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analtics","breinify","events","geolocation","holidays","locationservice","reverse-geocoding","temporal-data","timeout","wheather"],"created_at":"2025-10-23T11:42:15.738Z","updated_at":"2026-02-20T21:02:46.077Z","avatar_url":"https://github.com/Breinify.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://www.breinify.com/img/Breinify_logo.png\" alt=\"Breinify: Leading Temporal AI Engine\" width=\"250\"\u003e\n\u003c/p\u003e\n\n\n# Breinify's API Library\n\n[![Version](https://img.shields.io/cocoapods/v/BreinifyApi.svg?style=flat)](http://cocoapods.org/pods/BreinifyApi)\n[![License](https://img.shields.io/cocoapods/l/BreinifyApi.svg?style=flat)](http://cocoapods.org/pods/BreinifyApi)\n[![Platform](https://img.shields.io/cocoapods/p/BreinifyApi.svg?style=flat)](http://cocoapods.org/pods/BreinifyApi)\n\n\u003csup\u003eFeatures: **Temporal Data**, **(Reverse) Geocoding**, **Events**, **Weather**, **Holidays**, **Analytics**\u003c/sup\u003e\n\n\nThis library utilizes [Breinify's API](https://www.breinify.com) to provide tasks like `PushNotifications`, `geocoding`, `reverse geocoding`, `weather and events look up`, `holidays determination` through the API's endpoints, i.e., `/activity` and `/temporaldata`. Each endpoint provides different features, which are explained in the following paragraphs. In addition, this documentation gives detailed examples for each of the features available for the different endpoints.\n\n**PushNotifications**: \nThe goal of utilizing Breinify’s Time-Driven push notifications is to send highly dynamic \u0026 individualized engagements to single app-users (customer) rather than the everyone in a traditional segments. These push notifications are triggered due to user behavior and a combination of hyper-relevant weather, events, and holidays. \n\n**Activity Endpoint**: The endpoint is used to understand the usage-patterns and the behavior of a user using, e.g., an application, a mobile app, or a web-browser. The endpoint offers analytics and insights through Breinify's dashboard.\n\n**TemporalData Endpoint**: The endpoint offers features to resolve temporal information like a timestamp, a location (latitude and longitude or free-text), or an IP-address, to temporal information (e.g., timezone, epoch, formatted dates, day-name),  holidays at the specified time and location, city, zip-code, neighborhood, country, or county of the location, events at the specified time and location (e.g., description, size, type), weather at the specified time and location (e.g., description, temperature).\n\n\n## Getting Started\n\n### Retrieving an API-Key\n\nFirst of all, you need a valid API-key, which you can get for free at [https://www.breinify.com](https://www.breinify.com). In the examples, we assume you have the following api-key:\n\n**938D-3120-64DD-413F-BB55-6573-90CE-473A**\n\n\nIt is recommended to use signed messages when utilizing the iOS library. A signed messages ensures, that the request is authorized. To activate signed message ensure that Verification Signature is enabled for your key (see Breinify's API Docs for further information). In this documentation we assume that the following secret is attached to the API key and used to sign a message.\n\n**utakxp7sm6weo5gvk7cytw==**\n\n### Requirements\n\n- iOS 9.0+ \n- Xcode 12.1\n- AppCode 2020.2+\n- Swift 5.0\n\n\n### Installation \n\nPlease follow this [link](Documentation/cocoapods_instructions.md) if you're new to Cocoapods and need some information how to setup the environment (please use always the latest available verison on Cocoapods).\n\n#### Including the Library\n\nAdd in your pod file:\n\n```\n...\npod 'BreinifyApi', '~\u003e 2.0.17'\n...\n\n```\n\n#### Consideration of Firebase Libraries\n\nIn case of Firebase Message support (only used for sending PushNotifications by using Firebase Cloud Message Service) the following Firebase Libraries needs to be included as well:\n\n```\n...\npod 'Firebase/Core'\npod 'Firebase/Messaging'\n...\n```\n\n#### Permissions\n\nThe Breinify SDK needs some permission in order to retrieve the appropriate information. In your `info.plist` file you have to add the following permissions:\n\n```xml\n\u003ckey\u003eNSAppTransportSecurity\u003c/key\u003e\n\u003cdict\u003e\n    \u003ckey\u003eNSExceptionDomains\u003c/key\u003e\n    \u003cdict\u003e\n        \u003ckey\u003eapi.breinify.com\u003c/key\u003e\n        \u003cdict\u003e\n            \u003c!--Include to allow subdomains--\u003e\n            \u003ckey\u003eNSIncludesSubdomains\u003c/key\u003e\n            \u003ctrue/\u003e\n            \u003c!--Include to allow HTTP requests--\u003e\n            \u003ckey\u003eNSTemporaryExceptionAllowsInsecureHTTPLoads\u003c/key\u003e\n            \u003ctrue/\u003e\n            \u003c!--Include to specify minimum TLS version--\u003e\n            \u003ckey\u003eNSTemporaryExceptionMinimumTLSVersion\u003c/key\u003e\n            \u003cstring\u003eTLSv1.1\u003c/string\u003e\n        \u003c/dict\u003e\n        \u003ckey\u003eip-api.com\u003c/key\u003e\n        \u003cdict\u003e\n            \u003c!--Include to allow subdomains--\u003e\n            \u003ckey\u003eNSIncludesSubdomains\u003c/key\u003e\n            \u003ctrue/\u003e\n            \u003c!--Include to allow HTTP requests--\u003e\n            \u003ckey\u003eNSTemporaryExceptionAllowsInsecureHTTPLoads\u003c/key\u003e\n            \u003ctrue/\u003e\n            \u003c!--Include to specify minimum TLS version--\u003e\n            \u003ckey\u003eNSTemporaryExceptionMinimumTLSVersion\u003c/key\u003e\n            \u003cstring\u003eTLSv1.1\u003c/string\u003e\n        \u003c/dict\u003e\n    \u003c/dict\u003e\n\u003c/dict\u003e\n```\n\n\n\n### Configuring the Library \n\nWhenever the library is used, it needs to be configured once with the correct API key and secret. The best place to do this is within the `didFinishLaunchingWithOptions` method like this: \n\n```Swift\nimport BreinifyApi\n\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -\u003e Bool {\n        \n        /// constants for ApiKey and secret\n        let validApiKey = \"938D-3120-64DD-413F-BB55-6573-90CE-473A\"\n        let validSecret = \"utakxp7sm6weo5gvk7cytw==\"\n\n        Breinify.initialize(apiKey: validApiKey, secret: validSecret)\n        return true\n    }\n```\n\n\n\n### Clean-Up after Usage\n\nWhenever the library is not used anymore, it is recommended to clean-up and release the resources held. To do so, the `Breinify.applicationWillTerminate()` method is used.  Add the call to the `applicationWillTerminate` method like this:\n\n```swift\nfunc applicationWillTerminate(_ application: UIApplication) {\n        Breinify.applicationWillTerminate()\n}\n```\n\n\n\n## Activity: Selected Usage Examples\n\nThe `/activity` endpoint is used to track the usage of, e.g., an application, an app, or a web-site. There are several libraries available to be used for different system (e.g.,  [Node.js](https://github.com/Breinify/brein-api-library-node), [Android](https://github.com/Breinify/brein-api-library-android), [Java](https://github.com/Breinify/brein-api-library-java), [JavaScript](https://github.com/Breinify/brein-api-library-javascript-browser), [Ruby](https://github.com/Breinify/brein-api-library-ruby), [PHP](https://github.com/Breinify/brein-api-library-php), [Python](https://github.com/Breinify/brein-api-library-python)).\n\n### Sending Login \n\nThe example shows, how to send a login activity, reading the data from an request. In general, activities are added to the interesting measure points within your applications process (e.g., `login`, `addToCart`, `pageVisit`). The endpoint offers analytics and insights through Breinify's dashboard.\n\nAdd the `Breinify.setUserInfo(...)` as soon as user information are available and before the first of any `activities`.\n\n```swift\n// create a user you're interested in\nBreinify.setUserInfo(firstName: \"Fred\", \n                     lastName: \"Feuerstein\",\n                     phone: \"+1223344556677\",\n                     email: \"fred.feuerstein@stoneage.com\")\n\n```\n\n\n\n### Sending pageVisit Activity\n\nSending an activity is done by applying the following 4 steps:\n\n1. create additional activity type related data\n4. call activity endpoint with the activity type and additional tags\n\n```Swift\n// create additional activity type related data \nlet tagsDic = [String: Any]()\ntagsDic[\"pageId\"] = \"userDetailsPage\" as Any\n \n// invoke activity call\nBreinify.sendActivity(BreinActivityType.PAGE_VISIT.rawValue, tagsDic: tagsDic)\n```\n\n\n\n## TemporalData: Selected Usage Examples\n\nThe `/temporalData` endpoint is used to transform your temporal data into temporal information, i.e., enrich your temporal data with information like \n*current weather*, *upcoming holidays*, *regional and global events*, and *time-zones*, as well as geocoding and reverse geocoding.\n\n### Getting User Information\n\nSometimes it is necessary to get some more information about the user of an application, e.g., to increase usability and enhance the user experience, \nto handle time-dependent data correctly, to add geo-based services, or increase quality of service. The client's information can be retrieved easily \nby calling the `/temporaldata` endpoint utilizing the `Breinify.temporalData(...)` method or by executing a `BreinTemporalData` instance, i.e.,:\n\n```swift\ndo {   \n   try Breinify.temporalData({\n      // success\n      (result: BreinResult) -\u003e Void in\n                \n      if let holiday = result.get(\"holidays\") {\n         print(\"Holiday is: \\(holiday)\")\n      }\n      if let weather = result.get(\"weather\") {\n         print(\"Weather is: \\(weather)\")\n      }\n      if let location = result.get(\"location\") {\n         print(\"Location is: \\(location)\")\n      }\n      if let time = result.get(\"time\") {\n         print(\"Time is: \\(time)\")\n      }\n   })\n   } catch {\n     print(\"Error\")\n}\n```\n\nThe returned result contains detailed information about the time, the location, the weather, holidays, and events at the time and the location. A detailed\nexample of the returned values can be found \u003ca target=\"_blank\" href=\"https://www.breinify.com/documentation\"\u003ehere\u003c/a\u003e.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/Breinify/brein-api-library-java/master/documentation/img/sample-user-information.png\" alt=\"Sample output of the user information.\" width=\"500\"\u003e\u003cbr/\u003e\n  \u003csup\u003ePossilbe sample output utilizing some commanly used features.\u003c/sup\u003e\n\u003c/p\u003e\n\n\n### Geocoding (resolve Free-Text to Locations)\n\nSometimes it is necessary to resolve a textual representation to a specific geo-location. The textual representation can be structured and even partly unstructured, e.g., the textual representation `the Big Apple` is considered to be unstructured, whereby a structured location would be, e.g., `{ city: 'Seattle', state: 'Washington', country: 'USA' }`. It is also possible to pass in partial information and let the system try to resolve/complete the location, e.g., `{ city: 'New York', country: 'USA' }`.\n\n```swift\n\tdo {\n\t   let breinTemporalData = BreinTemporalData()\n\t           .setLocation(freeText: \"The Big Apple\")\n\t            \n\t   try Breinify.temporalData(breinTemporalData, {           \n\t          (result: BreinResult) -\u003e Void in\n\t        \n             let breinLocationResult = BreinLocationResult(result)\n             print(\"Latitude is: \\(breinLocationResult.getLatitude())\")\n             print(\"Longitude is: \\(breinLocationResult.getLongitude())\")\n             print(\"Country is: \\(breinLocationResult.getCountry())\")\n             print(\"State is: \\(breinLocationResult.getState())\")\n             print(\"City is: \\(breinLocationResult.getCity())\")\n             print(\"Granularity is: \\(breinLocationResult.getGranularity())\")\n\t        })\n\t  } catch {\n\t       print(\"Error\")\n\t  }\n```\n\nThis will lead to the following result:\n\n```\nLatitude is: 40.7614927583\nLongitude is: -73.9814311179\nCountry is: US\nState is: NY\nCity is: New York\n```\n\nOr shown as an Apple Map result:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/Breinify/brein-api-library-ios/master/Documentation/img/geomap.png\" alt=\"Sample Map of the results from the geocoding requests.\" width=\"400\"\u003e\u003cbr/\u003e\n  \u003csup\u003eMap output by utilizing the result of reverse geocoding requests.\u003c/sup\u003e\n\u003c/p\u003e\n\n\n### Reverse Geocoding (retrieve GeoJsons for, e.g., Cities, Neighborhoods, or Zip-Codes)\n\nThe library also offers the feature of reverse geocoding. Having a specific geo-location and resolving the coordinates to a specific city or neighborhood (i.e., names of neighborhood, city, state, country, and optionally GeoJson shapes). \n\nA possible request if you're interesed in events might look like this:\n\n```swift\ndo {\n   let breinTemporalData = BreinTemporalData()\n         .setLatitude(37.7609295)\n         .setLongitude(-122.4194155)\n         .addShapeTypes([\"CITY\"]) \n  \n   try Breinify.temporalData(breinTemporalData, {\n      (result: BreinResult) -\u003e Void in\n      print(\"Api Success : result is:\\n \\(result)\")\n\n     // Events\n     let breinEventResult = BreinEventResult(result)\n     breinEventResult.getEventList().forEach { (entry) in\n\n     let eventResult = BreinEventResult(entry)\n     print(\"Starttime is: \\(eventResult.getStartTime())\")\n     print(\"Endtime is: \\(eventResult.getEndTime())\")\n     print(\"Name is: \\(eventResult.getName())\")\n     print(\"Size is: \\(eventResult.getSize())\")\n\n     let breinLocationResult = eventResult.getLocationResult()\n     print(\"Latitude is: \\(breinLocationResult.getLatitude())\")\n     print(\"Longitude is: \\(breinLocationResult.getLongitude())\")\n     print(\"Country is: \\(breinLocationResult.getCountry())\")\n     print(\"State is: \\(breinLocationResult.getState())\")\n     print(\"City is: \\(breinLocationResult.getCity())\")\n     print(\"Granularity is: \\(breinLocationResult.getGranularity())\")\n     }\n   } \n```\n\n\n\n## PushNotifications: Selected Usage Example\n\nLet's integrate Breinify's PushNotifications within an iOS App. Follow this [link](Documentation/pushnotification_configuration.md) to see how you can configure your app for receiving push notifications.\n\n\n\n### Configuring the Library with APNS Service\n\nIn case the push notifications will come from APNS add the following statements in your `AppDelegate.swift` file:\n\n```swift\nimport BreinifyApi\n\nfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { \n        var userInfoDic = [String: String]()\n        userInfoDic[\"firstName\"] = \"Fred\"\n        userInfoDic[\"lastName\"] = \"Firestone\"\n        userInfoDic[\"phone\"] = \"+1223344556677\"\n        userInfoDic[\"email\"] = \"fred.firestone@stoneage.com\" // mandatory\n\n        let apnsToken = Breinify.retrieveDeviceToken(deviceToken)\n\n        Breinify.initWithDeviceTokens(apnsToken: apnsToken,\n                        fcmToken: nil,\n                        userInfo: userInfoDic)\n             \n   }\n```\n\n\n\n### Configuring the Library with Firebase Cloud Message Service\n\nIn case the Push Notifications will come from Firebase Cloud Message Service add the following statements in your `AppDelegate.swift` file:\n\n```swift\nimport Firebase\nimport BreinifyApi\n\nfunc application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\n        // Firebase Message to retrieve the token\n        Messaging.messaging().token { token, error in\n            if let error = error {\n                print(\"Error fetching FCM registration token: \\(error)\")\n            } else if let token = token {\n                print(\"FCM registration token: \\(token)\")\n\n                var userInfoDic = [String: String]()\n                userInfoDic[\"firstName\"] = \"Fred\"\n                userInfoDic[\"lastName\"] = \"Firestone\"\n                userInfoDic[\"phone\"] = \"+1223344556677\"\n                userInfoDic[\"email\"] = \"fred.firestone@stoneage.com\" // mandatory\n\n                let apnsToken = Breinify.retrieveDeviceToken(deviceToken)\n\n                Breinify.initWithDeviceTokens(apnsToken: apnsToken,\n                        fcmToken: token,\n                        userInfo: userInfoDic)\n         }\n      }\n   }\n\n```\n\n\n\n### Integration\n\n\nUsing Breinify Push Notifications in iOS apps is straightforward. The Breinify API integrates smoothly within the iOS Application Lifecycle. Simply invoke the appropriate Breinify functions within the `didReceiveRemoteNotification`  lifecycle functions:\n\nAdd the following statements to your delegate swift file (e.g `AppDelegate.swift`):\n\n```Swift\nimport BreinifyApi\n```\n#### Method didReceiveRemoteNotification\n\nThere are two different methods named `didReceiveRemoteNotification` that needs to be enhanced by sending the userInfo to the Breinify SDK like this:\n\n```Swift\nfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -\u003e Void) {\n   // inform the Breinify API      \n   Breinify.didReceiveRemoteNotification(userInfo)\n   completionHandlerUIBackgroundFetchResult.newData)  \n}\n```\n\nAnd this one without the completionHandler parameter.\n\n```swift\nfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {\n  Breinify.didReceiveRemoteNotification(userInfo)     \n}\n```\n\n\n\n### Notification Sample Screens\n\nThe Breinify engine will trigger a notification that will be send through Apple Notification Service and will trigger notification to the user.\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/Breinify/brein-api-library-ios/master/Documentation/img/notification.png\" alt=\"Sample output of the user information.\" width=\"500\"\u003e\u003cbr/\u003e\n  \u003csup\u003eNotification that will appear.\u003c/sup\u003e\n\u003c/p\u003e\n\nAssuming the user will react to this particular notification a more detailed dialog might appear if the App has been configured to use RichText-Notifications:\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/Breinify/brein-api-library-ios/master/Documentation/img/richttextnotification.png\" alt=\"Sample output of the user information.\" width=\"500\"\u003e\u003cbr/\u003e\n  \u003csup\u003eDetailed notification with more information.\u003c/sup\u003e\n\u003c/p\u003e\n\nIt is just a sample to show a map. Further media content can be considered as well (e.g. Images, Videos).\n\n\n### Application Capabilities\n\n#### Location Data\nThe Breinify SDK can provide current location data if your app has configured the appropriate properties within the `Info.plist` file. Simply add the following location permissions:\n\n```xml\n\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\u003cstring\u003ePlease allow this app to provide location data.\u003c/string\u003e\n    \n\u003ckey\u003eNSLocationAlwaysAndWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003ePlease allow this app to provide location data.\u003c/string\u003e\n    \n\u003ckey\u003eNSLocationUsageDescription\u003c/key\u003e\n\u003cstring\u003ePlease allow this app to provide location data.\u003c/string\u003e\n    \n\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003ePlease allow this app to provide location data.\u003c/string\u003e\n\n```\n\n#### Transport Security\nThe Breinify SDK will send information via TCP. This needs to be enabled by with an appropriate entry within the `Info.plist` file like this:\n\n```xml\n\u003ckey\u003eNSAppTransportSecurity\u003c/key\u003e\n\u003cdict\u003e\n    \u003ckey\u003eNSAllowsArbitraryLoads\u003c/key\u003e\n    \u003ctrue/\u003e\n\u003c/dict\u003e\n```\n\n### Further links\nTo understand all the capabilities of Breinify's APIs, have a look at:\n\n* [Breinify's Website](https://www.breinify.com).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreinify%2Fbrein-api-library-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbreinify%2Fbrein-api-library-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbreinify%2Fbrein-api-library-ios/lists"}