PHP Xero API > Ceate Invoice not recieving customer address details

I’m having an issue with XERO Api when creating invoices. It all works fine apart from the addess and contact number do not pull through to XERO. Below is the code I’m using. There are no errors and the contact is created and invoice email sent just no address details. Can anyone see anything I’m missing?

        
       
         
        $xeroTenantId = $this->Storage_model->getSession()['tenant_id'];
        
        
        if ($this->Storage_model->getHasExpired()) {
            $provider = new LeagueOAuth2ClientProviderGenericProvider([
            'clientId'                => 'xxxxxxxxxx',
            'clientSecret'            => 'xxxxxxxxxx',
            'redirectUri'             => 'xxxxxxxxxx.co.uk/callback',
            'urlAuthorize'            => 'https://login.xero.com/identity/connect/authorize',
            'urlAccessToken'          => 'https://identity.xero.com/connect/token',
            'urlResourceOwnerDetails' => 'https://api.xero.com/api.xro/2.0/Organisation'
          ]);

            $newAccessToken = $provider->getAccessToken('refresh_token', [
              'refresh_token' => $this->Storage_model->getRefreshToken()
            ]);

            // Save my token, expiration and refresh token
            $this->Storage_model->setToken(
                $newAccessToken->getToken(),
                $newAccessToken->getExpires(),
                $xeroTenantId,
                $newAccessToken->getRefreshToken(),
                $newAccessToken->getValues()["id_token"] );
          }
        

        $config = XeroAPIXeroPHPConfiguration::getDefaultConfiguration()->setAccessToken( (string)$this->Storage_model->getSession()['token'] );
        
        $apiInstance = new XeroAPIXeroPHPApiAccountingApi(
              new GuzzleHttpClient(),
              $config
          );
            
           
        
            $idempotencyKey = rand()."IDDEMP";
            $summarizeErrors = true;
            $unitdp = 4;
            $dateValue = new DateTime('now');
            $dueDateValue = new DateTime('now');
            $dueDateValue->modify("+1 month");
            
            //test data
            $contact['firstName'] = "Fred";
            $contact['surname'] = "Blogs";
            $contact['email'] = "[email protected]";
            $contact['contactNumber'] = "079671111111";
            $contact['billingAddress1'] = "Address 1";
            $contact['billingAddress2'] = "Address 2";
            $contact['billingAddress3'] = "Address 3";
            $contact['billingAddress4'] = "Address 4";
            $contact['billingPostcode'] = "DT94XX";
            
            //[add a contact]
            $setFirstName = $contact['firstName'];
            $setLastName = $contact['surname'];
            $setEmailAddress = $contact['email'];
            $setContactNumber = $contact['contactNumber'];
         
             $address = array(array(
                'AddressType' => 'STREET',
                'AddressLine1' => $contact['billingAddress1'],
                 'AddressLine2' => $contact['billingAddress2'],
                'City' => $contact['billingAddress3'],
                 'State' => $contact['billingAddress4'],
                'PostalCode' => $contact['billingPostcode']
            ));
         
        
            $contact = new XeroAPIXeroPHPModelsAccountingContact;
            $contact->setName($setFirstName." ".$setLastName)
                ->setFirstName($setFirstName)
                ->setLastName($setLastName)
                ->setEmailAddress($setEmailAddress)
                ->setContactNumber($setContactNumber)
                ->setAddresses($address);
          
            $arr_contacts = [];
            array_push($arr_contacts, $contact);
            
            $contacts = new XeroAPIXeroPHPModelsAccountingContacts;
            $contacts->setContacts($arr_contacts);

            $apiResponse = $apiInstance->createContacts($xeroTenantId,$contacts);
            //[/add a contact]
            $lineItems = array();

            $lineItemTracking = new XeroAPIXeroPHPModelsAccountingLineItemTracking;
            $lineItemTracking->setTrackingCategoryID('00000000-0000-0000-0000-000000000000');
            $lineItemTracking->setTrackingOptionID('00000000-0000-0000-0000-000000000000');
            $lineItemTrackings = [];
            array_push($lineItemTrackings, $lineItemTracking);
            
         foreach($order as $value) {
            $lineItem = new XeroAPIXeroPHPModelsAccountingLineItem;
            $lineItem->setDescription($value['rowTitle']);
            $lineItem->setQuantity($value['rowQty']);
            $lineItem->setUnitAmount($value['rowPrice']);
            $lineItem->setAccountCode('200');
            $lineItem->setTracking($lineItemTrackings);
            array_push($lineItems, $lineItem);
         }
            

            $invoice = new XeroAPIXeroPHPModelsAccountingInvoice;
            $invoice->setType(XeroAPIXeroPHPModelsAccountingInvoice::TYPE_ACCREC);
            $invoice->setContact($contact);
            $invoice->setDate($dateValue);
            $invoice->setDueDate($dueDateValue);
            $invoice->setLineItems($lineItems);
            $invoice->setReference($contact['reference']);
            $invoice->setStatus('AUTHORISED');  //$invoice->setStatus(XeroAPIXeroPHPModelsAccountingInvoice::STATUS_DRAFT);
         
        
        
            $invoices = new XeroAPIXeroPHPModelsAccountingInvoices;
            $arr_invoices = [];
            array_push($arr_invoices, $invoice);
            $invoices->setInvoices($arr_invoices);
            
        
            try {
              $result = $apiInstance->createInvoices($xeroTenantId, $invoices, $idempotencyKey, $summarizeErrors, $unitdp);
              $data = XeroAPIXeroPHPAccountingObjectSerializer::sanitizeForSerialization($result);
             
                //email invoice
                $requestEmpty = new XeroAPIXeroPHPModelsAccountingRequestEmpty;
               
                try {
                    $idempotencyKey = rand()."IDDEMP";  
                    $apiInstance->emailInvoice($xeroTenantId, $invocieID = $data->Invoices[0]->InvoiceID, $requestEmpty, $idempotencyKey);
                    } catch (Exception $e) {
                      echo 'Exception when calling AccountingApi->emailInvoice: ', $e->getMessage(), PHP_EOL;
                    }
                
            } catch (Exception $e) {
              echo 'Exception when calling AccountingApi->createInvoices: ', $e->getMessage(), PHP_EOL;
            }
            
        echo "complete";
        
    }