The following code is a example for authentication and a simple request with PHP and cURL.

<?php
# Run with: php -S localhost:8000

session_start();

$CLIENT_ID = "123";
$CLIENT_SECRET = "123";
$CALLBACK = "http://localhost:8000";
$SCOPES = array("sales_invoices", "documents");

function authorizeUrl($client_id, $callback, $scopes = array())
{
  $pattern = "https://moneybird.com/oauth/authorize?client_id=%s&redirect_uri=%s&scope=%s&response_type=code";
  return sprintf($pattern, $client_id,
                           urlencode($callback),
                           implode("+", $scopes));
}

function getAccessCode($client_id, $callback, $client_secret, $request_code) {
  $curl = curl_init("https://moneybird.com/oauth/token");
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
  curl_setopt($curl, CURLOPT_HEADER, false);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_POST, true);
  curl_setopt($curl, CURLOPT_POSTFIELDS, rawurldecode(http_build_query(array(
    'client_id' => $client_id,
    'redirect_uri' => $callback,
    'client_secret' => $client_secret,
    'code' => $request_code,
    'grant_type' => 'authorization_code'
  ))));

  $json = json_decode(curl_exec($curl));
  return $json->access_token;
}

function getAdministrations($access_token) {
  $headers = array(
    'Content-Type: application/json',
    sprintf('Authorization: Bearer %s', $access_token)
  );

  $curl = curl_init("https://moneybird.com/api/v2/administrations.json");

  curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

  $result = json_decode(curl_exec($curl));

  return $result;
}

if (isset($_GET['reset'])) {
  session_destroy();
  header(sprintf("Location: %s", $CALLBACK));
  die();
} elseif(isset($_SESSION['access_token'])) {
  $administrations = getAdministrations($_SESSION['access_token']);

  foreach($administrations as $administration) {
    echo $administration->name . "<br />";
  }
} elseif (isset($_GET['code'])) {
  $access_token = getAccessCode($CLIENT_ID, $CALLBACK, $CLIENT_SECRET, $_GET['code']);
  $_SESSION['access_token'] = $access_token;

  header(sprintf("Location: %s", $CALLBACK));
  die();
}  else {
  echo "Starting point, click on the link <br />"
  ?>
  <a href="<?php echo authorizeUrl($CLIENT_ID, $CALLBACK, $SCOPES); ?>">Click</a>
  <?php
}