1. Go to this page and download the library: Download codebes/gripp-sdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
codebes / gripp-sdk example snippets
use CodeBes\GrippSdk\GrippClient;
GrippClient::configure();
use CodeBes\GrippSdk\GrippClient;
GrippClient::configure(token: 'your-api-token');
use CodeBes\GrippSdk\GrippClient;
use CodeBes\GrippSdk\Resources\Company;
use CodeBes\GrippSdk\Resources\Contact;
use CodeBes\GrippSdk\Resources\Project;
// Configure once at application boot
GrippClient::configure();
// Find a record by ID
$company = Company::find(123);
// Get all records (auto-paginated)
$allCompanies = Company::all();
// Query with filters
$activeCompanies = Company::where('active', true)
->orderBy('companyname', 'asc')
->limit(50)
->get();
// Create a record
$result = Company::create([
'companyname' => 'Acme Corp',
'relationtype' => 'COMPANY',
'email' => '[email protected]',
]);
// Update a record
Company::update(123, [
'phone' => '+31 20 123 4567',
]);
// Delete a record
Company::delete(123);
use CodeBes\GrippSdk\Resources\Project;
// Simple equality filter (two-argument form)
$projects = Project::where('company', 42)->get();
// With operator (three-argument form)
$projects = Project::where('name', 'contains', 'Website')->get();
// Chain multiple filters
$results = Project::where('company', 42)
->where('archived', false)
->orderBy('createdon', 'desc')
->limit(25)
->offset(0)
->get();
// Get just the first match
$project = Project::where('name', 'contains', 'Redesign')->first();
// Count matching records
$count = Project::where('archived', false)->count();
use CodeBes\GrippSdk\Resources\Project;
use CodeBes\GrippSdk\Resources\Hour;
// Filter by year
$projects = Project::where('archived', false)
->whereYear('createdon', 2026)
->get();
// Filter by month
$hours = Hour::where('employee', 42)
->whereMonth('date', 2026, 3)
->get();
// Filter by date range
$invoices = Invoice::where('company', 10)
->whereDateBetween('date', '2026-01-01', '2026-03-31')
->get();
// Created or modified since (for incremental syncing)
$updated = Project::where('archived', false)
->whereModifiedSince(new DateTime('2026-03-01 00:00:00'))
->get();
// Start a query without a filter, when the first thing you need is a helper
$recent = Hour::query()
->whereModifiedSince(new DateTime('2026-03-01 00:00:00'))
->get();
// Fetches ALL matching projects across all pages
$all = Project::where('archived', false)->get();
// Fetches only the first 25 (single page)
$page = Project::where('archived', false)->limit(25)->get();
use CodeBes\GrippSdk\GrippClient;
use CodeBes\GrippSdk\Resources\Company;
use CodeBes\GrippSdk\Resources\Contact;
$transport = GrippClient::getTransport();
$transport->startBatch();
// Queue multiple calls (these don't execute yet)
Company::find(1);
Company::find(2);
Contact::find(10);
// Execute all queued calls in a single HTTP request
$responses = $transport->executeBatch();
foreach ($responses as $response) {
$rows = $response->rows();
// Process each response...
}
$transport = GrippClient::getTransport();
// Check current rate limit state (from most recent response headers)
$transport->getRateLimitRemaining(); // e.g. 847
$transport->getRateLimitLimit(); // e.g. 1000
// Abort requests when budget is low
$transport->beforeRequest(function (int $requestCount, ?int $remaining, ?int $limit) {
if ($remaining !== null && $remaining <= 5) {
throw new \RuntimeException("Only {$remaining} API calls left!");
}
});
// React when a 429 or 503 rate limit hits
$transport->onRateLimitExceeded(function (?int $retryAfter, ?int $remaining) {
// Set a flag, notify monitoring, etc.
Log::warning("Gripp rate limit hit, retry after {$retryAfter}s");
});
use CodeBes\GrippSdk\Exceptions\AuthenticationException;
use CodeBes\GrippSdk\Exceptions\RateLimitException;
use CodeBes\GrippSdk\Exceptions\RequestException;
use CodeBes\GrippSdk\Exceptions\GrippException;
try {
$company = Company::find(123);
} catch (AuthenticationException $e) {
// 401 or 403 - invalid token or forbidden
if ($e->isTokenInvalid()) {
// Handle invalid/expired token
}
if ($e->isForbidden()) {
// Handle insufficient permissions
}
} catch (RateLimitException $e) {
// 429 - too many requests
$retryAfter = $e->getRetryAfter(); // seconds to wait
$remaining = $e->getRemaining(); // remaining requests
} catch (RequestException $e) {
// Other API errors
$data = $e->getResponseData(); // raw error response
} catch (GrippException $e) {
// Base exception for all SDK errors (e.g. not configured)
}
// Fetches all companies, regardless of how many pages it takes
$companies = Company::all(); // Returns Illuminate\Support\Collection
// Filtered queries also auto-paginate
$active = Company::where('active', true)->get(); // All pages
use CodeBes\GrippSdk\Features\Billability;
Billability::forEmployee(42, '2025-01-01', '2025-12-31'); // billability
Billability::forTeam('2025-01-01', '2025-12-31');
Billability::invoiceabilityForEmployee(42, '2025-01-01', '2025-12-31'); // invoiceability
Billability::invoiceabilityForTeam('2025-01-01', '2025-12-31'); // per employee and in total
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.