> ## Documentation Index
> Fetch the complete documentation index at: https://docs.avraapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel SDK Universal API call

> Use the AvraAPI Laravel SDK Universal Function for a released provider route that does not yet have a typed SDK method.

`AvraAPI::call()` is the Laravel SDK's Universal Function. Use it only when a
released provider route is not yet available through a typed service method.
For a service that already has a typed method, such as Currency, Security,
Location, SMS, or Utilities, use that typed method instead.

The Laravel package discovers the `AvraAPI` Facade alias automatically. Import
`Avraapi\Laravel\Facades\AvraAPI` when you prefer an explicit dependency for
IDE and static-analysis support.

<Info>
  The Universal Function is for released **provider** routes. It is not a
  shortcut around the Universal Payment Gateway, payment completion, provider
  configuration, or browser-safety requirements.
</Info>

## SDK function

```php title="Copy the Universal Function signature" theme={null}
$response = AvraAPI::call(
    method: 'GET_OR_POST',
    path: 'RELEASED_PROVIDER_ROUTE',
    payload: [],
);
```

| Argument | Use |
| - | - |
| `method` | `GET` or `POST`, case-insensitive. |
| `path` | A released provider route in any supported path format. |
| `payload` | Optional query parameters for `GET`, or a JSON request body for `POST`. |

The method returns `ApiResponse|BinaryResponse`. JSON responses expose their
operation result through `$response->data`; image or binary-media responses
use `BinaryResponse`, just as typed Utility methods do.

## Use a typed service whenever it exists

The following two calls reach the same released Currency route. The typed
method is clearer, validates its own inputs, and should be your default.

```php title="Preferred: typed SDK method" theme={null}
<?php

use Avraapi\Laravel\Facades\AvraAPI;

// AvraAPI SDK call.
$response = AvraAPI::currency()->getCodes();

// Your application code.
$codes = $response->data['codes'];
```

```php title="Universal Function: supported fallback" theme={null}
<?php

use Avraapi\Laravel\Facades\AvraAPI;

// AvraAPI SDK call. GET payload values become query parameters.
$response = AvraAPI::call('GET', 'utility/currency/codes');

// Your application code.
$codes = $response->data['codes'];
```

## Send a released POST operation

Use an exact released route and its documented body fields. This example uses
the public Security endpoint; normally, prefer
`AvraAPI::security()->checkVpn()` for the same operation.

```php title="POST through the Universal Function" theme={null}
<?php

use Avraapi\Laravel\Facades\AvraAPI;

// AvraAPI SDK call.
$response = AvraAPI::call('POST', 'security/vpn-shield', [
    'ip' => '194.195.93.1',
]);

// Your application code.
$isVpn = $response->data['is_vpn'];
$requestId = $response->requestId;
```

Refer to the [REST API Reference](/api-reference/overview) for the route's
request fields, response shape, billing rules, and error cases before using a
new provider operation.

## Path formats

The client normalises all of these forms before sending the request. Choose one
consistent form for your application; a short relative route is usually the
clearest.

```php title="Equivalent route paths" theme={null}
<?php

use Avraapi\Laravel\Facades\AvraAPI;

// Each call resolves to the configured AvraAPI base URL plus utility/currency/codes.
AvraAPI::call('GET', 'utility/currency/codes');
AvraAPI::call('GET', '/utility/currency/codes');
AvraAPI::call('GET', '/api/v1/utility/currency/codes');
AvraAPI::call('GET', 'https://avraapi.com/api/v1/utility/currency/codes');
```

The client removes a leading API version path and the host portion of a full
URL, then uses the configured `APIX_BASE_URL`. This is useful when moving a
verified route from the API Reference into your backend code.

## Response handling

Use the returned type before consuming the output. Most provider routes return
an `ApiResponse`; media routes can return `BinaryResponse`.

```php title="Handle a JSON or media result" theme={null}
<?php

use Avraapi\Apix\Responses\ApiResponse;
use Avraapi\Apix\Responses\BinaryResponse;
use Avraapi\Laravel\Facades\AvraAPI;

// AvraAPI SDK call. Use a released route and its documented payload.
$response = AvraAPI::call('POST', 'utilities/qr/generate', [
    'data' => 'https://example.com/receipt/ORDER-001',
    'format' => 'png',
]);

// Your application code.
if ($response instanceof BinaryResponse) {
    return response($response->body, $response->httpStatus, [
        'Content-Type' => $response->contentType,
        'Content-Length' => (string) $response->size,
    ]);
} elseif ($response instanceof ApiResponse) {
    $data = $response->data;
}
```

## Boundaries and safety

<Warning>
  Do not use `call()` for payment initiation, payment completion, callbacks,
  gateway credentials, or any route that is not released in the public API
  Reference. Payment work uses the dedicated server-side
  [`payment()` service](/sdk/laravel/advanced-services).
</Warning>

`call()` sends the normal Project Client ID, Client Secret, and environment
headers. It does not expose fluent `withProvider()` or `withPrivacyMode()`
controls, so use the typed provider service when you need either of those
one-request options. The Laravel package does not add a queue, event, job,
controller, or webhook helper around this fallback.

## Next steps

<CardGroup cols={2}>
  <Card title="Provider service guides" icon="layer-group" href="/sdk/laravel/currency-services">
    Start with typed provider methods before using the Universal Function.
  </Card>

  <Card title="REST API Reference" icon="server" href="/api-reference/overview">
    Verify a released route, its request fields, response, and error contract.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.