PHP SDK
philiprehberger/docgen
Generated client + hand-tuned pollRender helper. View source on GitHub.
Install
shell
composer require philiprehberger/docgenQuickstart
Author a template, freeze a version, submit a render, poll until terminal.
php
<?php
use Docgen\Client\Configuration;
use Docgen\Client\Api\TemplatesApi;
use Docgen\Client\Api\RendersApi;
use Docgen\Client\Model\TemplateCreate;
use Docgen\Client\Model\RenderCreate;
use Docgen\Sdk\PollRender;
use GuzzleHttp\Client as HttpClient;
$config = (new Configuration())
->setHost('https://api.docgen.philiprehberger.com')
->setAccessToken(getenv('DOCGEN_API_KEY')); // docgen_live_…
$http = new HttpClient();
$templates = new TemplatesApi($http, $config);
$renders = new RendersApi($http, $config);
// 1. Create a template
$template = $templates->createTemplate(new TemplateCreate([
'name' => 'Invoice',
'body' => '<h1>Invoice {{ number }}</h1><p>Total: {{ total }}</p>',
]));
// 2. Freeze v1
$templates->createTemplateVersion($template->getId());
// 3. Submit a render
$render = $renders->createRender(new RenderCreate([
'template_id' => $template->getId(),
'formats' => ['pdf'],
'data' => ['number' => 'INV-001', 'total' => '$2,625.00'],
]));
// 4. Poll until terminal
$done = PollRender::until($renders, $render->getId(), ['max_wait_ms' => 30000]);
foreach ($done->getOutputs() as $output) {
if ($output->getFormat() === 'pdf') {
echo "Download: " . $output->getUrl() . PHP_EOL;
}
}The pollRender helper
Exponential backoff (500ms → 5s ceiling), configurable wall-clock budget.
php
use Docgen\Sdk\PollRender;
use Docgen\Sdk\PollRenderTimeout;
try {
$done = PollRender::until($renders, $render->getId(), [
'max_wait_ms' => 30000,
'initial_interval_ms' => 500,
'max_interval_ms' => 5000,
'backoff_factor' => 1.6,
]);
} catch (PollRenderTimeout $e) {
// $e->renderId, $e->maxWaitMs
}Laravel integration. The client is plain PSR code — wrap it in a service binding if you want Laravel to inject your DOCGEN_API_KEY from config/services.php. The model layer plays nicely with Eloquent factories for integration tests.