vinicinbgs/autentique-v2
A PHP client for the Autentique v2 API that lets you create, send, and manage electronic signature documents from your Laravel or plain PHP applications, with a fluent interface for folders, signers, and webhooks.
composer require vinicinbgs/autentique-v2 and pin at least ^4.3.3 — this release is a patch on the 4.3.x line with no signature or config changes, so it is a drop-in upgrade from 4.3.2.php artisan vendor:publish --tag=autentique-config or the tag listed in the README) and set AUTENTIQUE_TOKEN plus the sandbox/endpoint toggle in .env. Never commit a production token; generate a separate sandbox token from the Autentique dashboard.config/autentique.php (token, endpoint/sandbox, timeouts), the facade/root class registered by the service provider, and the src/ endpoint classes — each Autentique API resource (documents, folders, signatures, webhooks) maps to one class, which is the fastest way to discover which methods actually exist in your pinned version.storage/app/..., register one or more signers with name/email, and capture the returned document id plus each signer's signature link. That flow exercises auth, upload, and response parsing in one pass and is the shape 80% of real integrations use.vendor/bin/phpunit or Pest, depending on the tag) to confirm your PHP/Laravel version combo is supported before writing integration code.DocumentService/ContractService that takes the package client via constructor injection gives you one place to add logging, retries, and tenant-specific tokens, and makes tests trivial.document_id, folder_id, signer emails, status, and the signature links in your own tables (a polymorphic signable relation on Invoice, Contract, Employee, etc. works well). Treat Autentique as the source of truth for status but your DB as the source of truth for "which of my records does this document belong to".$tries, backoff(), and only retry on 5xx/timeouts — retrying a 422 just burns quota.listDocuments on a schedule is fine as a reconciliation safety net, but should not be the primary path.config()->set() before resolving) per tenant. If the package binds a singleton, use app()->forgetInstance(...) or a factory wrapper so token switching actually takes effect.signatures and null-check the biometry block rather than assuming its presence. Store it as structured JSON alongside the signature record, and surface it in your audit view rather than parsing it at display time.Http::fake() if the package uses Laravel's client) or bind a mock of your own service wrapper; assert on the payload you send (file, signer list, folder) more than on the package's parsing, so package upgrades don't churn your tests.$request->getContent(), not the decoded array — re-encoding JSON changes key order and whitespace and will fail valid payloads. Also exclude the webhook route from CSRF and from any global body-parsing middleware that rewrites the request.php artisan config:cache after changing the token or sandbox flag, otherwise you'll debug 401s that are really stale config. This is the most common "the package is broken" report.UploadedFile instances, respect the size limit, and prefer storing an immutable copy of the signed PDF yourself — Autentique URLs are not permanent, and you want the evidence locally.pending, signed, rejected, expired) — comparing raw API strings across the codebase is where silent bugs appear when Autentique adds a state.vendor/; if you need a missing endpoint, extend the package class or open an upstream PR — the project is active and small fixes like this one land quickly.How can I help you explore Laravel packages today?