---
title: "PHP SDK"
description: "The Goomzo API for PHP."
url: "https://docs.goomzo.africa/docs/developers/php-sdk"
docs_index: /llms.txt
lastUpdated: 2026-11-12
section: "Get started"
related:
  - /docs/developers/get-started
  - /docs/developers/ts-sdk
  - /docs/developers/python-sdk
  - /docs/developers/go-sdk
---

> For an index of all documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt). Any page is also available as Markdown by adding .md to its URL.

# PHP SDK

> The Goomzo API for PHP.

`goomzo/goomzo-php` is the Goomzo API for PHP. It retries safely, pages through lists for you, and turns errors into
exceptions you can act on. It works with Laravel, Symfony or plain PHP.

## Requirements

- PHP 8.1 or later, with Composer.
- An API key. See [Authentication](https://docs.goomzo.africa/docs/developers/authentication?utm_source=llms&utm_medium=ai).

## Install

```bash
composer require goomzo/goomzo-php
```

## Make your first request

Set your API key's secret as `GOOMZO_API_KEY`, then send a message:

```php
use Goomzo\Goomzo;

$goomzo = new Goomzo();

$message = $goomzo->messages->sendOne([
    'to' => '+255712345678',
    'channel' => 'sms',
    'content' => ['text' => 'Amina, order #1042 is ready.'],
]);

echo $message['id'], ' ', $message['status'];
```

## How it reads

- **Requests and answers are arrays,** with the API's own keys, exactly as in its JSON, such as `customerId` and
  `sendAt`. They match the requests in these docs one for one.
- **Options are named arguments,** such as `idempotencyKey: 'order-1042'`.
- **Lists that can be long come as a [page](https://docs.goomzo.africa/docs/developers/php-sdk/lists?utm_source=llms&utm_medium=ai)** you can loop over.

## What it does for you

- **A fixed version:** it pins the API version it was written for, so a new version never changes what your code
  gets.
- **Safe retries:** network errors, `429` and `5xx` are tried again, twice by default. Every `POST` carries an
  `Idempotency-Key`, the same on each try, so nothing is done twice.
- **Errors you can act on:** an `ApiException` has the `status`, the `errorCode`, the `fields` that were wrong and the
  `requestId`.

## Next steps

<Cards>
  <Card
    title="Configuration"
    href="/docs/developers/php-sdk/configuration"
    description="API key, retries, timeouts and your own HTTP client."
  />
  <Card title="Send messages" href="/docs/developers/php-sdk/messages" description="SMS and WhatsApp, one or up to 100 at once." />
  <Card title="Webhooks" href="/docs/developers/php-sdk/webhooks" description="Check that an event is from Goomzo." />
</Cards>

---

For an index of all available documentation, see [/llms.txt](https://docs.goomzo.africa/llms.txt)
