@extends('admin.layouts.app') @section('title', __('admin.api_docs.title')) @section('content') {{-- Authentication --}}

{{ __('admin.api_docs.auth_title') }}

{{ trans_markup('admin.api_docs.auth_intro') }}

{{ __('admin.api_docs.parameter') }}{{ __('common.table.description') }}
identifier{{ __('admin.api_docs.identifier_desc') }}
secret{{ __('admin.api_docs.secret_desc') }}
action{{ trans_markup('admin.api_docs.action_param_desc') }}

{{ __('admin.api_docs.base_url') }}: {{ url('/api/v1') }}/<action>

{{ trans_markup('admin.api_docs.response_note') }}

{{ __('admin.api_docs.full_reference') }}

{{-- Table of Contents --}}

{{ __('admin.api_docs.toc') }}

{{-- Endpoint tables, one per API controller. The rows come from the live route table (ConfigController::apiDocs), so this reference cannot promise an endpoint that does not exist or omit one that does. --}} @foreach($sections as $section => $rows)

{{ __('admin.api_docs.section_'.$section) }}

@foreach($rows as $slug => $row) @endforeach
{{ __('admin.api_docs.method') }}{{ __('admin.api_docs.action') }}{{ __('common.table.description') }}{{ __('admin.api_docs.key_params') }}
{{ $row['method'] }} {{ $slug }} {{ $row['desc'] }} {{ $row['params'] }}
@endforeach {{-- CODE EXAMPLES --}}

{{ __('admin.api_docs.section_examples') }}

{{ __('admin.api_docs.example_get_clients') }}

curl -G {{ url('/api/v1/getclients') }} \
  -H "X-API-Key: YOUR_IDENTIFIER" \
  -H "X-API-Secret: YOUR_SECRET" \
  -d "limitnum=25"
<?php
$ch = curl_init('{{ url('/api/v1/getclients') }}?' . http_build_query(['limitnum' => 25]));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-API-Key: YOUR_IDENTIFIER',
    'X-API-Secret: YOUR_SECRET',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($result);
import requests
response = requests.get(
    '{{ url('/api/v1/getclients') }}',
    headers={'X-API-Key': 'YOUR_IDENTIFIER', 'X-API-Secret': 'YOUR_SECRET'},
    params={'limitnum': 25},
)
print(response.json())

{{ __('admin.api_docs.example_create_invoice') }}

curl -X POST {{ url('/api/v1/createinvoice') }} \
  -H "X-API-Key: YOUR_IDENTIFIER" \
  -H "X-API-Secret: YOUR_SECRET" \
  -d "userid=1" \
  -d "duedate=2026-01-15" \
  -d "items[0][description]=Hosting - January 2026" \
  -d "items[0][amount]=29.99" \
  -d "paymentmethod=banktransfer"
<?php
$ch = curl_init('{{ url('/api/v1/createinvoice') }}');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-API-Key: YOUR_IDENTIFIER',
    'X-API-Secret: YOUR_SECRET',
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'userid'        => 1,
    'duedate'       => '2026-01-15',
    'items'         => [['description' => 'Hosting - January 2026', 'amount' => 29.99]],
    'paymentmethod' => 'banktransfer',
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);

{{ __('admin.api_docs.example_response') }}

{
  "result": "success",        {{ __('admin.api_docs.response_success_comment') }}
  "totalresults": 25,         {{ __('admin.api_docs.response_total_comment') }}
  "startnumber": 0,           {{ __('admin.api_docs.response_start_comment') }}
  "numreturned": 10,          {{ __('admin.api_docs.response_num_comment') }}
  "data": [ ... ]             {{ __('admin.api_docs.response_data_comment') }}
}

{{ __('admin.api_docs.response_error_comment') }}
{
  "result": "error",
  "message": "Invalid API secret"
}
@push('scripts') @endpush @endsection