{"id":14957022,"url":"https://github.com/facebook/facebook-php-business-sdk","last_synced_at":"2026-04-02T18:45:42.678Z","repository":{"id":17914410,"uuid":"20878334","full_name":"facebook/facebook-php-business-sdk","owner":"facebook","description":"PHP SDK for Meta Marketing API","archived":false,"fork":false,"pushed_at":"2026-02-05T07:32:48.000Z","size":4981,"stargazers_count":902,"open_issues_count":31,"forks_count":529,"subscribers_count":120,"default_branch":"main","last_synced_at":"2026-03-09T16:48:41.810Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://developers.facebook.com/docs/business-sdk","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/facebook.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-06-16T08:48:26.000Z","updated_at":"2026-03-07T08:36:13.000Z","dependencies_parsed_at":"2024-03-15T19:29:01.617Z","dependency_job_id":"bbe5ec59-bc9c-409d-b2ad-db4e0575e8cc","html_url":"https://github.com/facebook/facebook-php-business-sdk","commit_stats":{"total_commits":536,"total_committers":123,"mean_commits":4.357723577235772,"dds":0.7574626865671642,"last_synced_commit":"69f2310839f56325e310fb0bcf4cdae11f74c401"},"previous_names":[],"tags_count":145,"template":false,"template_full_name":null,"purl":"pkg:github/facebook/facebook-php-business-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Ffacebook-php-business-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Ffacebook-php-business-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Ffacebook-php-business-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Ffacebook-php-business-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/facebook","download_url":"https://codeload.github.com/facebook/facebook-php-business-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/facebook%2Ffacebook-php-business-sdk/sbom","scorecard":{"id":390786,"data":{"date":"2025-08-11","repo":{"name":"github.com/facebook/facebook-php-business-sdk","commit":"8ffe1738353c8201d1e4769339e249217f27aa37"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.4,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/facebook/facebook-php-business-sdk/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/facebook/facebook-php-business-sdk/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/facebook/facebook-php-business-sdk/ci.yml/main?enable=pin","Info:   0 out of   1 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/facebook/.github/SECURITY.md:1","Info: Found linked content: github.com/facebook/.github/SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: github.com/facebook/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: 'up-to-date branches' is disabled on branch 'main'","Info: status check found to merge onto on branch 'main'","Warn: PRs are not required to make changes on branch 'main'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-18T17:44:35.207Z","repository_id":17914410,"created_at":"2025-08-18T17:44:35.207Z","updated_at":"2025-08-18T17:44:35.207Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2024-09-24T13:13:55.683Z","updated_at":"2026-04-02T18:45:42.642Z","avatar_url":"https://github.com/facebook.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Facebook Business SDK for PHP\n\n[![Packagist](https://img.shields.io/packagist/v/facebook/php-business-sdk)](https://packagist.org/packages/facebook/php-business-sdk)\n[![License](https://img.shields.io/badge/license-Facebook%20Platform-blue.svg?style=flat-square)](https://github.com/facebook/facebook-php-business-sdk/blob/main/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/facebook/facebook-php-business-sdk/ci.yml)](https://github.com/facebook/facebook-php-business-sdk/actions/workflows/ci.yml)\n\n## Introduction\n\nThe Facebook \u003ca href=\"https://developers.facebook.com/docs/business-sdk\" target=\"_blank\"\u003eBusiness SDK\u003c/a\u003e is a one-stop shop to help our partners better serve their businesses. Partners are using multiple Facebook API's to serve the needs of their clients. Adopting all these API's and keeping them up to date across the various platforms can be time consuming and ultimately prohibitive. For this reason Facebook has developed the Business SDK bundling many of its APIs into one SDK to ease implementation and upkeep. The Business SDK is an upgraded version of the Marketing API SDK that includes the Marketing API as well as many Facebook APIs from different platforms such as Pages, Business Manager, Instagram, etc.\n\n## Quick Start\n\nBusiness SDK \u003ca href=\"https://developers.facebook.com/docs/business-sdk/getting-started\" target=\"_blank\"\u003eGetting Started Guide\u003c/a\u003e\n\n## Pre-requisites\n\n### Register An App\n\nTo get started with the SDK, you must have an app\nregistered on \u003ca href=\"https://developers.facebook.com/\" target=\"_blank\"\u003edevelopers.facebook.com\u003c/a\u003e.\n\nTo manage the Marketing API, please visit your\n\u003ca href=\"https://developers.facebook.com/apps/\u003cYOUR APP ID\u003e/dashboard\"\u003e App Dashboard \u003c/a\u003e\nand add the \u003cb\u003eMarketing API\u003c/b\u003e product to your app.\n\n**IMPORTANT**: For security, it is recommended that you turn on 'Require App Secret' in your app's Settings-\u003eAdvanced page.\n\n### Obtain An Access Token\n\nWhen someone connects with an app using Facebook Login and approves the request\nfor permissions, the app obtains an access token that provides temporary, secure\naccess to Facebook APIs.\n\nAn access token is an opaque string that identifies a User, app, or Page.\n\nFor example, to access the Marketing API, you need to generate a User access token\nfor your app and ask for the ``ads_management`` permission; to access Pages API,\nyou need to generate a Page access token for your app and ask for the ``manage_page`` permission.\n\nRefer to our\n\u003ca href=\"https://developers.facebook.com/docs/facebook-login/access-tokens\" target=\"_blank\"\u003e\nAccess Token Guide\u003c/a\u003e to learn more.\n\nFor now, we can use the\n\u003ca href=\"https://developers.facebook.com/tools/explorer\" target=\"_blank\"\u003eGraph Explorer\u003c/a\u003e\nto get an access token.\n\n## Installation\n\nThe Facebook Business SDK requires PHP 8.0 or greater.\n\n### Composer\n\nThe Facebook Business SDK uses composer to manage dependencies. Visit the \u003ca href=\"https://getcomposer.org/download/\" target=\"_blank\"\u003ecomposer documentation\u003c/a\u003e to learn how to install composer.\n\nExecute the command below in your project root:\n```shell\ncomposer require facebook/php-business-sdk\n```\n\nThis SDK and its dependencies will be installed under `./vendor`.\n\n### Alternatives\n\nThis repository is written following the [psr-4 autoloading standard](http://www.php-fig.org/psr/psr-4/). Any psr-4 compatible autoloader can be used.\n\n## Usage\n\n### Api main class\n\nThe `FacebookAds\\Api` object is the foundation of the Business SDK which encapsulates a `FacebookAds\\Session` and is used to execute requests against the Graph API.\n\nTo instantiate an Api object you will need a valid access token:\n```php\nuse FacebookAds\\Api;\n\n// Initialize a new Session and instantiate an Api object\nApi::init($app_id, $app_secret, $access_token);\n\n// The Api object is now available through singleton\n$api = Api::instance();\n\n```\n\nOnce instantiated, the Api object will allow you to start making requests to the Graph API.\n\n### Fields names\n\nDue to the high number of field names in the Graph API existing objects, in order to facilitate your code maintainability, enum-like classes are provided.\nThese files are stored under the `FacebookAds/Object/Fields` directory.\nYou can access object properties in the same manner you would usually do in php:\n\n```php\nuse FacebookAds\\Object\\AdAccount;\n\n$account = new AdAccount();\n$account-\u003ename = 'My account name';\necho $account-\u003ename;\n```\n\nor using the enums:\n\n```php\nuse FacebookAds\\Object\\AdAccount;\nuse FacebookAds\\Object\\Fields\\AdAccountFields;\n\n$account = new AdAccount();\n$account-\u003e{AdAccountFields::NAME} = 'My account name';\necho $account-\u003e{AdAccountFields::NAME};\n```\n\n### Object classes\n\nFacebook Ads entities are defined as classes under the `FacebookAds/Object` directory.\n\n#### Read Objects\n\n```php\nuse FacebookAds\\Object\\AdAccount;\n\n$account = (new AdAccount($account_id))-\u003egetSelf();\n```\n\nFor some objects, the Ads API doesn't return all available fields by default. The first argument of the object's read method is an array of field names to be requested.\n\n```php\nuse FacebookAds\\Object\\AdAccount;\nuse FacebookAds\\Object\\Fields\\AdAccountFields;\n\n$fields = array(\n  AdAccountFields::ID,\n  AdAccountFields::NAME,\n);\n\n$account = (new AdAccount($account_id))-\u003egetSelf($fields);\n```\nRequesting a high number of fields may cause the response time to visibly increase, you should always request only the fields you really need.\n\n#### Create Objects\n\n```php\nuse FacebookAds\\Object\\AdSet;\nuse FacebookAds\\Object\\AdAccount;\nuse FacebookAds\\Object\\Fields\\AdSetFields;\n\n$account_id = 'act_123123';\n$campaign_id = '123456';\n\n$account = new AdAccount($account_id);\n$adset = $account-\u003ecreateAdSet(\n    array(),\n    array(\n      AdSetFields::NAME =\u003e 'My Test AdSet',\n      AdSetFields::CAMPAIGN_ID =\u003e $campaign_id,\n      AdSetFields::DAILY_BUDGET =\u003e 150,\n      AdSetFields::START_TIME =\u003e (new \\DateTime(\"+1 week\"))-\u003eformat(\\DateTime::ISO8601),\n      AdSetFields::END_TIME =\u003e (new \\DateTime(\"+2 week\"))-\u003eformat(\\DateTime::ISO8601),\n      AdSetFields::BILLING_EVENT =\u003e 'IMPRESSIONS',\n      AdSetFields::TARGETING =\u003e array('geo_locations' =\u003e array('countries' =\u003e array('US'))),\n      AdSetFields::BID_AMOUNT =\u003e '1000',\n    )\n);\n\necho $adset-\u003eid;\n```\n\n#### Update Objects\n\n```php\nuse FacebookAds\\Object\\AdSet;\nuse FacebookAds\\Object\\Fields\\AdSetFields;\n\n$ad_set_id = '123456';\n\n$set = new AdSet($ad_set_id);\n$fields = array(\n);\n$params = array(\n  AdSetFields::NAME =\u003e 'My new AdSet name',\n);\n$set-\u003eupdateSelf($fields, $params);\n```\n\n#### Delete Objects\n\n```php\nuse FacebookAds\\Object\\AdSet;\n\n$ad_set_id = '123456';\n\n$set = new AdSet($ad_set_id);\n$set-\u003edeleteSelf();\n```\n\n### Cursors\n\nSince the release of the Facebook Graph API 2.0, pagination is handled through [cursors](https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2#paging).\nHere cursors are defined as in `\\FacebookAds\\Cursor`. Cursors are generally returned from connection methods:\n\n```php\nuse FacebookAds\\Object\\AdAccount;\nuse FacebookAds\\Object\\Fields\\CampaignFields;\n\n$account = new AdAccount('\u003cACT_ID\u003e');\n$cursor = $account-\u003egetCampaigns(['id','name']);\n\n// Loop over objects\nforeach ($cursor as $campaign) {\n  echo $campaign-\u003e{CampaignFields::NAME}.PHP_EOL;\n}\n\n// Access objects by index\nif ($cursor-\u003ecount() \u003e 0) {\n  echo \"The first campaign in the cursor is: \".$cursor[0]-\u003e{CampaignFields::NAME}.PHP_EOL;\n}\n\n// Fetch the next page\n$cursor-\u003efetchAfter();\n// New Objects will be appended to the cursor\n```\n\n#### Implicit Fetching\n\nWhenever all object connected to a parent are required (carelessly from the number of HTTP requests) implicit fetching can help reducing the amount of code required.\nIf cursor has Implicit Fetching enabled, while iterating (foreach, Cursor::next(), Cursor::prev()) the page end is reached, the SDK will automatically fetch and append a new page, until cursor end.\nImplicit Fetching will make you lose control of the number of HTTP request that will be sent and, for this reason, is disabled by default.\nImplicit Fetching can be enabled for a specific cursor:\n\n```php\n$cursor-\u003esetUseImplicitFetch(true);\n```\n\nOr globally:\n\n```php\nuse FacebookAds\\Cursor;\n\nCursor::setDefaultUseImplicitFetch(true);\n```\n\n#### Reverse Iterations\n\nCursors are bidirectional, and can be iterated in reverse order:\n\n```php\nuse FacebookAds\\Object\\AbstractCrudObject;\n\n/** @var \\FacebookAds\\Cursor $cursor */\n$cursor-\u003esetUseImplicitFetch(true);\n\n$cursor-\u003eend();\nwhile ($cursor-\u003evalid()) {\n  echo $cursor-\u003ecurrent()-\u003e{AbstractCrudObject::FIELD_ID}.PHP_EOL;\n  $cursor-\u003eprev();\n}\n\n```\n\n## Tests\n\nThe 'test' folder contains the test cases. These are logically divided in unit and integration tests.\nIntegration tests require an active Facebook Ad Account, a Facebook Application and a valid Access Token.\n\nNote: we are currently unable to securely and reliably run integration tests on a public CI system. Our integrations with Travis and Scrutinizer (including badges at the top of this file) include only unit tests.\n\n\n### Install dependencies\n\nFrom the root folder run:\n\n```shell\nphp composer.phar install --dev\n```\n\n### Execute unit tests only\n\n```shell\n./vendor/bin/phpunit -c test/phpunit-travis.xml\n```\n\nTo run tests individually (be sure not to be pointing to an integration test file):\n\n```shell\n./vendor/bin/phpunit -c test/phpunit-travis.xml path/to/class/file\n```\n\n\n### Execute all tests (unit + integration)\n\nSetup your integration config:\n\n1 - Copy the config file template.\n\n```shell\ncp test/config.php.dist test/config.php\n```\n\n2 - Edit `test/config.php` with your information.\n\nExecute:\n\n```shell\n./vendor/bin/phpunit -c test/\n```\n\nTo run tests individually:\n\n```shell\n./vendor/bin/phpunit -c test/ path/to/class/file\n```\n\n## Debug\n\nIf this SDK is not working as expected, it may be either an SDK issue or API issue.\n\nThis can be identified by constructing a raw cURL request and seeing if the response is as expected\n\nfor example:\n\n```php\nrequire __DIR__ . '/vendor/autoload.php';\nuse FacebookAds\\Api;\nuse FacebookAds\\Object\\AdAccount;\n\nApi::init($app_id, $app_secret, $access_token);\n$api = Api::instance();\n\nuse FacebookAds\\Logger\\CurlLogger;\n$api-\u003esetLogger(new CurlLogger());\n$account = new AdAccount($account_id);\n$account-\u003eread(array('id'));\n```\n\nWhen running this code, this cURL request will be printed to the console as:\n```shell\ncurl -G \\\n  -d 'fields=id' \\\n  -d 'access_token=\u003caccess_token\u003e' \\\n  https://graph.facebook.com/v3.1/\u003cact_accountid\u003e\n```\n\n## SDK Codegen\nOur SDK is autogenerated from [SDK Codegen](https://github.com/facebook/facebook-business-sdk-codegen). If you want to learn more about how our SDK code is generated, please check this repository.\n\n## Issue\nSince we want to handle bugs more efficiently, we've decided to close issue reporting in GitHub and move to our dedicated bug reporting channel.\nIf you encounter a bug with Business SDK (PHP), please report the issue at [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffacebook%2Ffacebook-php-business-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffacebook%2Ffacebook-php-business-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffacebook%2Ffacebook-php-business-sdk/lists"}