The Setup resource provides access to system configuration settings in your Simpro environment. This includes webhooks, tax codes, payment methods, custom fields, labor rates, materials settings, and more.
$connector->setup(companyId: 0);Manage webhook subscriptions for event notifications:
// List webhooks
$webhooks = $connector->setup(companyId: 0)->webhooks()->list();
// Get a webhook
$webhook = $connector->setup(companyId: 0)->webhooks()->get(webhookId: 123);
// Create a webhook
$id = $connector->setup(companyId: 0)->webhooks()->create([
'URL' => 'https://yourapp.com/webhooks/simpro',
'Event' => 'job.created',
]);
// Update a webhook
$connector->setup(companyId: 0)->webhooks()->update(webhookId: 123, data: [
'URL' => 'https://yourapp.com/webhooks/simpro-v2',
]);
// Delete a webhook
$connector->setup(companyId: 0)->webhooks()->delete(webhookId: 123);Manage tax codes for invoicing:
// List tax codes
$taxCodes = $connector->setup(companyId: 0)->taxCodes()->list();
// Get a tax code
$taxCode = $connector->setup(companyId: 0)->taxCodes()->get(taxCodeId: 1);
// List tax code combines (combinations)
$combines = $connector->setup(companyId: 0)->taxCodes()->combines()->list();// List payment methods
$methods = $connector->setup(companyId: 0)->paymentMethods()->list();
// Get a payment method
$method = $connector->setup(companyId: 0)->paymentMethods()->get(paymentMethodId: 1);// List payment terms
$terms = $connector->setup(companyId: 0)->paymentTerms()->list();
// Get a payment term
$term = $connector->setup(companyId: 0)->paymentTerms()->get(paymentTermId: 1);// List customer groups
$groups = $connector->setup(companyId: 0)->customerGroups()->list();
// Create a customer group
$id = $connector->setup(companyId: 0)->customerGroups()->create([
'Name' => 'VIP Customers',
]);Geographic zones for service areas:
// List zones
$zones = $connector->setup(companyId: 0)->zones()->list();
// Create a zone
$id = $connector->setup(companyId: 0)->zones()->create([
'Name' => 'North Region',
]);$categories = $connector->setup(companyId: 0)->accountingCategories()->list();$groups = $connector->setup(companyId: 0)->businessGroups()->list();$accounts = $connector->setup(companyId: 0)->chartOfAccounts()->list();$centers = $connector->setup(companyId: 0)->costCenters()->list();Access custom fields for various entity types:
// Customer custom fields
$fields = $connector->setup(companyId: 0)->customFields()->customers()->list();
// Job custom fields
$fields = $connector->setup(companyId: 0)->customFields()->jobs()->list();
// Quote custom fields
$fields = $connector->setup(companyId: 0)->customFields()->quotes()->list();
// Asset custom fields
$fields = $connector->setup(companyId: 0)->customFields()->assets()->list();
// Employee custom fields
$fields = $connector->setup(companyId: 0)->customFields()->employees()->list();
// Available custom field types:
// customers, jobs, quotes, assets, employees, contractors, invoices,
// leads, plants, prebuildCatalogs, prebuildCatalogItems, projects,
// purchaseOrders, receipts, sites, suppliers, takes, vendorOrders, workOrdersManage asset types with nested resources:
// List asset types
$types = $connector->setup(companyId: 0)->assetTypes()->list();
// Get a specific asset type
$type = $connector->setup(companyId: 0)->assetTypes()->get(assetTypeId: 1);
// Access nested resources via scope
$scope = $connector->setup(companyId: 0)->assetType(assetTypeId: 1);
// Asset type files
$files = $scope->files()->list();
// Asset type folders
$folders = $scope->folders()->list();
// Asset type custom fields
$fields = $scope->customFields()->list();
// Asset type service levels
$levels = $scope->serviceLevels()->list();
// Service level failure points (nested further)
$levelScope = $scope->serviceLevel(serviceLevelId: 1);
$failurePoints = $levelScope->failurePoints()->list();
// Failure point recommendations
$fpScope = $levelScope->failurePoint(failurePointId: 1);
$recommendations = $fpScope->recommendations()->list();
// Asset type test readings
$readings = $scope->testReadings()->list();Access labor-related configuration:
// Fit times
$fitTimes = $connector->setup(companyId: 0)->labor()->fitTimes()->list();
// Labor rates
$rates = $connector->setup(companyId: 0)->labor()->laborRates()->list();
// Get overhead settings
$overhead = $connector->setup(companyId: 0)->labor()->laborRates()->getOverhead();
// Plant rates (read-only)
$plantRates = $connector->setup(companyId: 0)->labor()->plantRates()->list();
// Schedule rates
$scheduleRates = $connector->setup(companyId: 0)->labor()->scheduleRates()->list();
// Service fees (read-only)
$fees = $connector->setup(companyId: 0)->labor()->serviceFees()->list();Access materials-related configuration:
// Pricing tiers
$tiers = $connector->setup(companyId: 0)->materials()->pricingTiers()->list();
// Purchasing stages
$stages = $connector->setup(companyId: 0)->materials()->purchasingStages()->list();
// Stock take reasons
$reasons = $connector->setup(companyId: 0)->materials()->stockTakeReasons()->list();
// Stock transfer reasons
$reasons = $connector->setup(companyId: 0)->materials()->stockTransferReasons()->list();
// Units of measurement
$uoms = $connector->setup(companyId: 0)->materials()->uoms()->list();$activities = $connector->setup(companyId: 0)->activities()->list();$reasons = $connector->setup(companyId: 0)->quoteArchiveReasons()->list();$levels = $connector->setup(companyId: 0)->assetServiceLevels()->list();// List all commissions (basic and advanced combined)
$all = $connector->setup(companyId: 0)->commissions()->list();
// Basic commissions
$basic = $connector->setup(companyId: 0)->commissions()->basic()->list();
// Advanced commissions
$advanced = $connector->setup(companyId: 0)->commissions()->advanced()->list();// List currencies
$currencies = $connector->setup(companyId: 0)->currencies()->list();
// Get a currency (uses currency code as ID)
$currency = $connector->setup(companyId: 0)->currencies()->get(currencyId: 'GBP');
// Update currency exchange rate (no create/delete)
$connector->setup(companyId: 0)->currencies()->update(currencyId: 'USD', data: [
'ExchangeRate' => 1.25,
]);$profiles = $connector->setup(companyId: 0)->customerProfiles()->list();Get company default settings:
$defaults = $connector->setup(companyId: 0)->defaults()->get();
echo "Default Tax Code ID: {$defaults->defaultTaxCodeId}\n";
echo "Default Payment Term ID: {$defaults->defaultPaymentTermId}\n";$times = $connector->setup(companyId: 0)->responseTimes()->list();// List security groups (read-only)
$groups = $connector->setup(companyId: 0)->securityGroups()->list();
// Get a security group
$group = $connector->setup(companyId: 0)->securityGroups()->get(securityGroupId: 1);// Customer invoice status codes
$codes = $connector->setup(companyId: 0)->statusCodes()->customerInvoices()->list();
// Project status codes
$codes = $connector->setup(companyId: 0)->statusCodes()->projects()->list();
// Vendor order status codes
$codes = $connector->setup(companyId: 0)->statusCodes()->vendorOrders()->list();// Customer tags
$tags = $connector->setup(companyId: 0)->tags()->customers()->list();
// Project tags
$tags = $connector->setup(companyId: 0)->tags()->projects()->list();$categories = $connector->setup(companyId: 0)->taskCategories()->list();// List teams (returns ID and Name only)
$teams = $connector->setup(companyId: 0)->teams()->list();
// Get a team with specific columns
$team = $connector->setup(companyId: 0)->teams()->get(
teamId: 1,
columns: ['ID', 'Name', 'Availability', 'CostCenters', 'Members', 'Zones']
);
// Access team properties
echo "Team: {$team->name}\n";
// Team availability (array of time slots)
foreach ($team->availability ?? [] as $slot) {
echo "{$slot->startDay} {$slot->startTime} - {$slot->endDay} {$slot->endTime}\n";
}
// Team members
foreach ($team->members ?? [] as $member) {
echo "{$member->name} ({$member->type})\n";
}
// Cost centers and zones are Reference objects (ID and Name)
foreach ($team->costCenters ?? [] as $costCenter) {
echo "Cost Center: {$costCenter->name}\n";
}Most setup resources support full CRUD operations:
// List
$items = $connector->setup(companyId: 0)->webhooks()->list();
// Get
$item = $connector->setup(companyId: 0)->webhooks()->get(webhookId: 123);
// Create (returns new ID)
$id = $connector->setup(companyId: 0)->webhooks()->create([...]);
// Update (returns Response)
$response = $connector->setup(companyId: 0)->webhooks()->update(webhookId: 123, data: [...]);
// Delete (returns Response)
$response = $connector->setup(companyId: 0)->webhooks()->delete(webhookId: 123);Some resources are read-only:
plantRates()- List and Get onlyserviceFees()- List and Get onlysecurityGroups()- List and Get onlyteams()- List and Get onlycurrencies()- List, Get, and Update only (no Create/Delete)defaults()- Get only
use Simpro\PhpSdk\Simpro\Query\Search;
// Filter by name
$webhooks = $connector->setup(companyId: 0)->webhooks()->list()
->search(Search::make()->column('Name')->find('Invoice'))
->items();
// Order results
$taxCodes = $connector->setup(companyId: 0)->taxCodes()->list()
->orderBy('Name')
->items();$taxCodes = $connector->setup(companyId: 0)->taxCodes()->list()->all();
foreach ($taxCodes as $taxCode) {
LocalTaxCode::updateOrCreate(
['simpro_id' => $taxCode->id],
[
'name' => $taxCode->name,
'code' => $taxCode->code,
'rate' => $taxCode->rate,
]
);
}$webhookId = $connector->setup(companyId: 0)->webhooks()->create([
'URL' => 'https://yourapp.com/api/simpro/webhooks',
'Event' => 'job.created',
'Secret' => 'your-webhook-secret',
]);
echo "Webhook created with ID: {$webhookId}\n";$allCustomFields = [];
$entityTypes = [
'customers', 'jobs', 'quotes', 'assets', 'employees',
'contractors', 'invoices', 'leads', 'sites', 'suppliers',
];
foreach ($entityTypes as $type) {
$fields = $connector->setup(companyId: 0)->customFields()->{$type}()->list()->all();
$allCustomFields[$type] = $fields;
}
// Now $allCustomFields contains all custom field definitions by entity type$rates = $connector->setup(companyId: 0)->labor()->laborRates()->list()->all();
$csv = "ID,Name,Rate,Type\n";
foreach ($rates as $rate) {
$csv .= implode(',', [
$rate->id,
'"' . str_replace('"', '""', $rate->name ?? '') . '"',
$rate->rate ?? 0,
$rate->type ?? '',
]) . "\n";
}
file_put_contents('labor_rates.csv', $csv);