Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Api Laravel Package

bigcommerce/api

A PHP client for the BigCommerce API with OAuth authentication and ready-made resources for catalog, orders, customers, carts, and store data. Simplifies building integrations and apps against BigCommerce REST endpoints.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Official vendor SDK from BigCommerce's own GitHub org, MIT-licensed, so license and provenance risk is low. This is the canonical PHP path to the BigCommerce REST APIs.
  • The package is a thin, generated client rather than a framework integration. It exposes PSR-4 classes under Bigcommerce\Api\V3 (OpenAPI-generated API classes and models) alongside a deprecated legacy Bigcommerce\Api\Client for v2 endpoints. There is no Laravel service provider, facade, config publishing, or container binding.
  • For a Laravel codebase this means the package occupies the "transport/SDK" layer, not the "integration" layer. A TPM should budget for building the integration layer in-house: config, DI bindings, auth/token handling, retry/rate-limit middleware, pagination helpers, and webhook verification.
  • Multi-store and multi-tenant scenarios are feasible (store hash and token are per-client configuration) but require a manager/factory pattern rather than a single global singleton.
  • Update — release line confirmed at 3.x. Release 3.3.12 is a patch on 3.3.11, which confirms the package is on a semver 3.x line and still actively maintained. This supersedes the earlier placeholder guidance to pin to a 6.x.y range; the correct pin target is now 3.3.12 exactly.

Integration feasibility

  • Straightforward to install via Composer; depends on Guzzle 7, which aligns with Laravel 9/10/11's own HTTP client dependency, so conflict risk is low. Requires a modern PHP runtime (8.1+ for current majors).
  • Update — JWT dependency now on ^7.0. 3.3.12 relaxes firebase/php-jwt to ^7.0 to remediate CVE-2025-45769. Two practical consequences: (a) if we constrain firebase/php-jwt directly anywhere in the app (common when signing BigCommerce Customer Login JWTs or verifying our own tokens), Composer resolution must be checked — the SDK's ^7.0 constraint will conflict with a hard ^6.0 pin; (b) firebase/php-jwt 6→7 is a major bump, so any first-party code calling JWT::encode/JWT::decode needs a review pass for signature-algorithm and exception-handling changes.
  • Authentication is OAuth2 (client ID/secret, access token, store hash) or legacy API-account tokens; the SDK carries the token but does not manage the OAuth lifecycle, refresh, or secure storage. That is on us.
  • Webhook ingestion (install, uninstall, order, product events) is not handled by the package — signature verification and idempotent processing must be implemented against raw request bodies, which has CSRF-middleware implications in Laravel.
  • Net: a 2–4 week integration build for a focused read/write use case, assuming one developer familiar with Laravel and REST SDKs. The 3.3.12 upgrade itself is a composable, low-effort change; the JWT knock-on is the only non-trivial part.

Technical risk

  • Security remediation is now a live driver. CVE-2025-45769 sits in a transitive dependency of a package that handles credentials. Versions ≤3.3.11 carry it. Any pinned earlier release needs a documented exception or an expedited bump; this should be treated as a security-patch item in the backlog, not a routine minor.
  • Dependency-constraint churn on a security fix. Because the fix was implemented as a widened constraint (^7.0) rather than a hard requirement, an environment that resolves to firebase/php-jwt 6.x can still install 3.3.12 and remain exposed. Pinning the SDK version is not sufficient — we must assert the resolved JWT version in composer.lock and fail CI if it is below 7.x.
  • Generated-code churn: v3 classes are regenerated from BigCommerce's OpenAPI spec. Minor releases can shift method signatures and model shapes. Pin exact versions and treat SDK upgrades as scheduled work with a contract test suite.
  • v2/v3 split: much documentation and community example code still targets the deprecated v2 Client. Risk of building on a deprecated surface if developers follow stale samples.
  • Low community signal: 148 stars and zero Packagist dependents means thin third-party troubleshooting. Vendor support and official docs are the primary safety net. The 3.3.12 changelog style (single-entry, PR-linked) is a good sign for vendor responsiveness but does not change the community-footprint risk.
  • No built-in resilience: no retry, backoff, or rate-limit awareness. BigCommerce enforces per-store request ceilings; unthrottled workers will hit 429s under load.
  • Data-quality flag — partially resolved: the previously recorded future-dated release (2026-03-08) is now superseded by a plausibly dated 3.3.12 with a public PR link. Cadence still deserves a direct check against the repo and Packagist, but the metadata anomaly no longer blocks planning.

Key questions

  1. Which APIs are in scope — catalog, orders, customers, carts, pricing, webhooks — and are all of them available in v3, or does anything still require the deprecated v2 client?
  2. Single store or multi-tenant? If multi-tenant (an app in the BigCommerce marketplace), do we also need the app-install/uninstall callbacks and the Billing API?
  3. Sync direction and system of record: is BigCommerce authoritative for catalog and orders, or are we merging with an ERP/PIM?
  4. Webhooks or polling for each entity, and what is the acceptable staleness window?
  5. Where do access tokens live — encrypted column, secrets manager — and who owns rotation on uninstall/reinstall?
  6. What is the target PHP and Laravel version, and are there existing Guzzle pins that constrain the SDK major?
  7. (New) Do we use firebase/php-jwt directly anywhere (Customer Login JWT, internal token signing), and if so what is our current constraint and call-site compatibility with 7.x?
  8. (New) What is our policy for CVE-driven upgrades — is a security advisory on a transitive dependency allowed to bypass the normal quarterly upgrade cadence?

Integration Approach

Stack fit

  • Composer package with Guzzle 7; sits cleanly under Laravel's existing HTTP stack. No framework coupling to fight.
  • Recommended shape: a config/bigcommerce.php fed by environment variables (store hash, client ID/secret, access token), a BigCommerceServiceProvider registering a manager class that lazily builds Configuration → ApiClient → per-resource API objects (CatalogApi, OrdersApi, CustomersApi), and thin repository/service classes that wrap the generated clients so the rest of the app never imports Bigcommerce\Api\V3 directly.
  • Wrap the SDK behind our own interfaces. This is the single highest-leverage decision: it contains the blast radius of generated-code churn and makes the SDK swappable.
  • Inject a configured Guzzle client with a HandlerStack containing retry-with-backoff, structured logging, and a request-level throttle, rather than calling the SDK's default client.
  • Use Laravel queues plus a Redis/DB-backed limiter keyed per store hash to stay under BigCommerce's request ceiling; use RateLimited jobs so throttling is visible in Horizon rather than manifesting as silent 429 retries.

Migration path

  • Greenfield: build straight against v3 namespaced APIs; do not adopt the legacy Bigcommerce\Api\Client.
  • Brownfield: if any existing code uses the old static Client, isolate it behind the same wrapper interface first, then replace call sites resource-by-resource, starting with read-only catalog calls.
  • Token migration: move any hardcoded or .env-inline credentials into encrypted storage with a documented rotation procedure before going further.
  • Update — upgrade to 3.3.12 first. If any environment is on ≤3.3.11, sequence the bump ahead of feature work: update the SDK pin, resolve firebase/php-jwt to ≥7.0, run the composer audit and the full test suite, and only then proceed. This is a small, low-risk change and should not be batched with functional work.

Compatibility

  • Verify PHP constraint against the runtime and Guzzle constraint against existing composer locks. Pin the SDK to an exact version (3.3.12) rather than a caret range for the first release cycle.
  • Update — add a transitive-dependency assertion. Because 3.3.12 fixes the CVE by widening a constraint rather than enforcing it, a green Composer install does not prove the vulnerability is patched. Add an explicit check (composer show firebase/php-jwt or a lock-file assertion in CI) and an composer audit gate that fails the build on high-severity advisories.
  • Update — JWT major version review. Before merging 3.3.12, grep first-party code for Firebase\JWT usage and confirm call-site compatibility with 7.x; if we have a hard ^6.0 pin for our own reasons, resolve it consciously rather than letting Composer pick.
  • Response models are typed objects; JSON shape changes from BigCommerce surface as exceptions or nulls. Build a contract test that exercises each endpoint we depend on against a sandbox store and run it in CI on SDK upgrade PRs. Run that suite as the gate for 3.3.12 as well, since a JWT major can affect auth paths even when the API surface is unchanged.

Sequencing

  1. Apply 3.3.12 as a standalone security patch — bump the pin, resolve firebase/php-jwt to 7.x, run the audit and existing tests, deploy. No functional changes bundled.
  2. Spike: authenticate against a sandbox store and prove one read (catalog) and one write (order status or inventory) end-to-end.
  3. Build config, service provider, manager, and wrapper interfaces.
  4. Add Guzzle middleware: retry/backoff, per-store rate limiter, request/response logging with token redaction.
  5. Implement webhook receiver (CSRF exemption, HMAC verification against raw body, persistence, queue dispatch, idempotency keys).
  6. Build sync jobs for the prioritized entities, with pagination cursors and checkpointing.
  7. Add observability, then cut over from any polling mechanism to webhooks.
  8. Only then consider multi-store/marketplace app requirements.

Operational Impact

Maintenance

  • Vendor-maintained, which is the main argument for using it over a homegrown client. Expect periodic majors tied to OpenAPI regeneration; budget one upgrade-and-regression cycle per quarter.
  • Update — security patching is now a named, recurring workstream. 3.3.12 demonstrates that the vendor will ship CVE fixes as patch releases on the 3.x line, which is reassuring, but the fix arrived as a constraint change rather than a forced dependency. Own the resolved-version check ourselves; do not assume a patch bump closes the advisory.
  • Our wrapper layer is the durable asset; the SDK is replaceable. Keep the wrapper small and boring.
  • Dependabot on the SDK should be configured to open PRs but not auto-merge — with one exception: security advisories affecting the SDK or its transitive dependencies should page a human, not wait for the weekly review.

Support

  • No Laravel-specific support channel. Escalation is BigCommerce developer support plus the official docs; internal runbooks must be written by us.
  • With 148 stars and no dependents, expect to solve novel problems ourselves. Plan for one engineer to hold the domain knowledge and document it — avoid single-person dependency by pairing on the wrapper and webhook logic.
  • Update — add a security-response note to the runbook. Document how we learn about advisories (GitHub security alerts, composer audit in CI, Packagist advisories) and who is accountable for triaging them within a defined SLA.

Scaling

  • The client is stateless HTTP, so application scaling is a solved problem: add queue workers. The binding constraint is the per-store API rate limit, not our compute.
  • Design for throughput by batching, caching read-heavy catalog data locally, and preferring webhooks over polling. A polling design for orders will consume the rate budget quickly at any real order volume.
  • Large catalog or order-history backfills should be chunked with cursors and run in dedicated low-priority queues to avoid starving interactive traffic.

Failure modes

  • 429 throttling — most likely failure under load; requires backoff and a visible queue for deferred work, otherwise jobs fail silently.
  • Token expiry or revocation (app uninstall, merchant regeneration) — surfaces as 401s across all jobs. Needs alerting on auth-error rate and a documented re-auth path. A JWT library major bump raises the stakes here: auth regressions from a dependency change look identical to credential expiry in logs, so distinguish them explicitly.
  • Vulnerable dependency left behind — the specific risk introduced by this release: 3.3.12 installs cleanly even if firebase/php-jwt resolves to 6.x. Mitigation is a lock-file assertion plus composer audit, not the SDK pin alone.
  • Webhook loss, duplication, and out-of-order delivery — BigCommerce does not guarantee exactly-once. Every handler must be idempotent and keyed on event/resource ID, with a periodic reconciliation sweep as a backstop.
  • Partial batch failures — bulk operations can succeed for some records and fail for others; treat responses as per-item results, not all-or-nothing.
  • Payload size and memory — large catalog pages can blow PHP memory limits if deserialized wholesale; paginate aggressively and stream where possible.
  • SDK upgrade breakage — mitigated by pinning and contract tests, but only if those tests exist before the first upgrade. 3.3.12 is a good forcing function to confirm they do.

Ramp-up

  • A Laravel developer unfamiliar with BigCommerce needs roughly one to two weeks to be productive: a day on the SDK's object model, a day on auth and store-hash routing, and the rest on the API domain (catalog/order semantics).
  • The steepest learning curve is not the PHP package but BigCommerce's platform model — scopes, app lifecycle, webhook semantics, and rate-limit behavior. Budget for that explicitly in estimation.
  • Given the modest community footprint, allocate time for reading source rather than relying on blog posts and Stack Overflow; the generated classes are the most reliable documentation.
  • Update — small addition to onboarding: teach the auth chain end to end, including what the JWT dependency is used for and why the resolved version matters. It is the one part of this package where a routine composer update can have security consequences.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle