1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 21:22:58 +01:00

Merge pull request #8280 from turbo124/v5-develop

Fixes for translations
This commit is contained in:
David Bomba 2023-02-14 07:11:43 +11:00 committed by GitHub
commit 678d66c6e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 2669 additions and 1982 deletions

View File

@ -32,6 +32,11 @@ class OpenApiYaml extends Command
*/
protected $description = 'Build OpenApi YAML';
private array $directories = [
'/components/schemas',
'/paths/'
];
/**
* Create a new command instance.
*
@ -61,14 +66,50 @@ class OpenApiYaml extends Command
$this->info($file);
}
Storage::disk('base')->delete('/openapi/api-docs.yaml');
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/info.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/paths/paths.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/components.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/paths.yaml'));
//iterate paths
$directory = new DirectoryIterator($path . '/paths/');
foreach ($directory as $file) {
if ($file->isFile() && ! $file->isDot())
{
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents("{$path}/paths/{$file->getFilename()}"));
}
}
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/schemas.yaml'));
//iterate schemas
$directory = new DirectoryIterator($path . '/components/schemas/');
foreach ($directory as $file) {
if ($file->isFile() && ! $file->isDot())
{
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents("{$path}/components/schemas/{$file->getFilename()}"));
}
}
// Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/components/schemas/account.yaml'));
Storage::disk('base')->append('/openapi/api-docs.yaml', file_get_contents($path.'/misc/misc.yaml'));
}
}
}

View File

@ -127,6 +127,10 @@ class IncomeTransformer implements BankRevenueInterface
foreach($transaction->transaction as $transaction)
{
//do not store duplicate / pending transactions
if(property_exists($transaction,'status') && $transaction->status == 'PENDING')
continue;
$data[] = $this->transformTransaction($transaction);
}

View File

@ -52,12 +52,6 @@ class TokenAuth
return response()->json($error, 403);
}
$truth = app()->make(TruthSource::class);
$truth->setCompanyUser($company_token->cu);
$truth->setUser($company_token->user);
$truth->setCompany($company_token->company);
$truth->setCompanyToken($company_token);
/*
|
@ -67,7 +61,19 @@ class TokenAuth
|
*/
$truth = app()->make(TruthSource::class);
$truth->setCompanyUser($company_token->cu);
$truth->setUser($company_token->user);
$truth->setCompany($company_token->company);
$truth->setCompanyToken($company_token);
/*
| This method binds the db to the jobs created using this
| session
*/
app('queue')->createPayloadUsing(function () use ($company_token) {
nlog("setting DB ". $company_token->company->db);
return ['db' => $company_token->company->db];
});

View File

@ -37,6 +37,7 @@ class MultiDBProvider extends ServiceProvider
JobProcessing::class,
function ($event) {
if (isset($event->job->payload()['db'])) {
nlog("Settings DB: " . $event->job->payload()['db']);
MultiDB::setDb($event->job->payload()['db']);
}
}

View File

@ -0,0 +1,65 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Services\Email;
use App\Libraries\MultiDB;
use App\Models\Company;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class MailEntity implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected Company $company;
public function __construct(protected $invitation, private ?string $db, private ?string $reminder_template = null, private ?string $template_data = null, private bool $override = false)
{
$this->invitation = $invitation;
$this->db = $db;
$this->reminder_template = $reminder_template;
$this->template_data = $template_data;
$this->override = $override;
// $this->entity_string = $this->resolveEntityString();
// $this->entity = $invitation->{$this->entity_string};
// $this->settings = $invitation->contact->client->getMergedSettings();
// $this->reminder_template = $reminder_template ?: $this->entity->calculateTemplate($this->entity_string);
// $this->html_engine = new HtmlEngine($invitation);
// $this->template_data = $template_data;
}
public function handle(): void
{
MultiDB::setDb($this->db);
//construct mailable
//construct mailer
}
}

View File

@ -0,0 +1,80 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
namespace App\Services\Email;
use Illuminate\Mail\Mailables\Address;
/**
* MailObject.
*/
class MailObject
{
public ?string $db = null;
public array $to = [];
public ?Address $from = null;
public array $reply_to = [];
public array $cc = [];
public array $bcc = [];
public ?string $subject = null;
public ?string $body = null;
public array $attachments = [];
public string $company_key;
public ?object $settings = null;
public bool $whitelabel = false;
public ?string $logo = null;
public ?string $signature = null;
public ?string $greeting = null;
public ?int $client_id = null;
public ?int $vendor_id = null;
public ?int $user_id = null;
public ?int $client_contact_id = null;
public ?int $vendor_contact_id = null;
public ?string $email_template_body = null;
public ?string $email_template_subject = null;
public ?string $html_template = null;
public ?string $text_template = 'email.template.text';
public array $headers = [];
public ?string $invitation_key = null;
public ?int $entity_id = null;
public ?string $entity_class = null;
public array $variables = [];
}

File diff suppressed because it is too large Load Diff

211
openapi/components.yaml Normal file
View File

@ -0,0 +1,211 @@
components:
parameters:
X-API-SECRET:
name: X-API-SECRET
in: header
description: 'The API secret as defined by the .env variable API_SECRET. Only needed for self hosted users, and only applicable on the login route.'
required: false
schema:
type: string
example: password
X-Requested-With:
name: X-Requested-With
in: header
description: 'Used to send the XMLHttpRequest header'
required: true
schema:
type: string
readOnly: true
example: XMLHttpRequest
X-API-TOKEN:
name: X-API-TOKEN
in: header
description: 'The API token to be used for authentication'
required: true
schema:
type: string
example: TOKEN
X-API-PASSWORD:
name: X-API-PASSWORD
in: header
description: 'The login password when challenged on certain protected routes'
required: false
schema:
type: string
example: supersecretpassword
bank_integration_include:
name: include
in: query
description: Include child relations of the BankIntegration object. Format is comma separated.
require: false
schema:
type: string
examples:
company:
value: company
summary: The associated Company
account:
value: account
summary: The associated Account
bank_transactions:
value: bank_transactions
summary: The associated Bank Transactions
client_include:
name: include
in: query
description: Include child relationships of the Client Object.
required: false
schema:
type: string
examples:
activities:
value: activities
summary: include=activities will include the activities object in the response
ledger:
value: ledger
summary: include=ledger will include the ledger object in the response
system_logs:
value: system_logs
summary: include=system_logs will include the system_logs object in the response
activity_include:
name: include
in: query
description: Include child relations of the Activity object, format is comma separated. **Note** it is possible to chain multiple includes together, ie. include=account,token
required: false
schema:
type: string
examples:
history:
value: history
summary: include=history will include the history object in the response (This could include references to the backup HTML of the entity)
user:
value: user
summary: include=user will include the user object in the response
client:
value: client
summary: include=client will include the client object in the response
recurring_invoice:
value: recurring_invoice
summary: include=recurring_invoice will include the recurring_invoice object in the response
invoice:
value: invoice
summary: include=invoice will include the invoice object in the response
credit:
value: credit
summary: include=credit will include the credit object in the response
quote:
value: quote
summary: include=quote will include the quote object in the response
payment:
value: payment
summary: include=payment will include the payment object in the response
expense:
value: expense
summary: include=expense will include the expense object in the response
vendor_contact:
value: vendor_contact
summary: include=vendor_contact will include the vendor_contact object in the response
vendor:
value: vendor
summary: include=vendor will include the vendor object in the response
purchase_order:
value: purchase_order
summary: include=purchase_order will include the purchase_order object in the response
task:
value: task
summary: include=task will include the task object in the response
login_include:
name: include
in: query
description: Include child relations of the CompanyUser object, format is comma separated. **Note** it is possible to chain multiple includes together, ie. include=account,token
required: false
schema:
type: string
examples:
user:
value: user
summary: include=user will include the user object in the response
company:
value: company
summary: include=company will include the company object in the response
token:
value: token
summary: include=token will include the token object in the response
account:
value: account
summary: include=account will include the account object in the response
per_page_meta:
name: per_page
in: query
description: The number of records to return for each request, default is 20
required: false
schema:
type: int
example: 20
page_meta:
name: page
in: query
description: The page number to return for this request (when performing pagination), default is 1
required: false
schema:
type: int
example: 1
include:
name: include
in: query
description: 'Includes child relationships in the response, format is comma separated. Check each model for the list of associated includes'
required: false
schema:
type: string
example: 'first_load'
include_static:
name: include_static
in: query
description: 'Returns static variables'
required: false
schema:
type: string
example: include_static=true
clear_cache:
name: clear_cache
in: query
description: 'Clears the static cache'
required: false
schema:
type: string
example: clear_cache=true
index:
name: index
in: query
description: 'Replaces the default response index from data to a user specific string'
required: false
schema:
type: string
example: user
api_version:
name: api_version
in: query
description: 'The API version'
required: false
schema:
type: number
example: user
headers:
X-MINIMUM-CLIENT-VERSION:
description: 'The API version'
schema:
type: number
X-RateLimit-Remaining:
description: 'The number of requests left for the time window.'
schema:
type: integer
X-RateLimit-Limit:
description: 'The total number of requests in a given time window.'
schema:
type: integer
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-TOKEN

View File

@ -1,222 +1,5 @@
components:
schemas:
Account:
properties:
id:
description: 'The account hashed id'
type: string
example: AS3df3A
type: object
Activity:
properties:
id:
description: 'The id field of the activity'
type: string
example: Opnel5aKBz
activity_type_id:
description: 'The activity type id'
type: string
example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
example: Opnel5aKBz
company_id:
description: 'The company hashed id'
type: string
example: Opnel5aKBz
user_id:
description: 'The user hashed id'
type: string
example: Opnel5aKBz
invoice_id:
description: 'The invoice hashed id'
type: string
example: Opnel5aKBz
payment_id:
description: 'The payment hashed id'
type: string
example: Opnel5aKBz
credit_id:
description: 'The credit hashed id'
type: string
example: Opnel5aKBz
updated_at:
description: 'Unixtimestamp the last time the record was updated'
type: integer
example: '343421434'
expense_id:
description: 'The expense hashed id'
type: string
example: Opnel5aKBz
is_system:
description: 'Defines is the activity was performed by the system'
type: boolean
example: true
contact_id:
description: 'The contact hashed id'
type: string
example: Opnel5aKBz
task_id:
description: 'The task hashed id'
type: string
example: Opnel5aKBz
notes:
description: 'Activity Notes'
type: string
example: Opnel5aKBz
token_id:
description: 'The hashed ID of the token who performed the action'
type: string
example: Opnel5aKBz
ip:
description: 'The IP Address of the user who performed the action'
type: string
example: 192.168.1.252
user:
$ref: '#/components/schemas/User'
client:
$ref: '#/components/schemas/Client'
contact:
$ref: '#/components/schemas/ClientContact'
recurring_invoice:
$ref: '#/components/schemas/RecurringInvoice'
invoice:
$ref: '#/components/schemas/Invoice'
credit:
$ref: '#/components/schemas/Credit'
quote:
$ref: '#/components/schemas/Quote'
payment:
$ref: '#/components/schemas/Payment'
expense:
$ref: '#/components/schemas/Expense'
task:
$ref: '#/components/schemas/Task'
purchase_order:
$ref: '#/components/schemas/PurchaseOrder'
vendor:
$ref: '#/components/schemas/Vendor'
vendor_contact:
$ref: '#/components/schemas/VendorContact'
type: object
BTRules:
properties:
data_key:
description: 'The key to search'
type: string
example: 'description,amount'
operator:
description: 'The operator flag of the search'
type: string
example: '>'
value:
description: 'The value to search for'
type: string
example: bob
type: object
BankIntegration:
properties:
id:
description: 'The bank integration hashed id'
type: string
example: AS3df3A
company_id:
description: 'The company hashed id'
type: string
example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
example: AS3df3A
provider_bank_name:
description: 'The providers bank name'
type: string
example: 'Chase Bank'
bank_account_id:
description: 'The bank account id'
type: integer
example: '1233434'
bank_account_name:
description: 'The name of the account'
type: string
example: 'My Checking Acc'
bank_account_number:
description: 'The account number'
type: string
example: '111 234 2332'
bank_account_status:
description: 'The status of the bank account'
type: string
example: ACTIVE
bank_account_type:
description: 'The type of account'
type: string
example: CREDITCARD
balance:
description: 'The current bank balance if available'
type: number
example: '1000000'
currency:
description: 'iso_3166_3 code'
type: string
example: USD
type: object
BankTransaction:
properties:
id:
description: 'The bank integration hashed id'
type: string
example: AS3df3A
company_id:
description: 'The company hashed id'
type: string
example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
example: AS3df3A
transaction_id:
description: 'The id of the transaction rule'
type: integer
example: 343434
amount:
description: 'The transaction amount'
type: number
example: 10
currency_id:
description: 'The currency ID of the currency'
type: string
example: '1'
account_type:
description: 'The account type'
type: string
example: creditCard
description:
description: 'The description of the transaction'
type: string
example: 'Potato purchases for kevin'
category_id:
description: 'The category id'
type: integer
example: 1
category_type:
description: 'The category description'
type: string
example: Expenses
base_type:
description: 'Either CREDIT or DEBIT'
type: string
example: CREDIT
date:
description: 'The date of the transaction'
type: string
example: '2022-09-01'
bank_account_id:
description: 'The ID number of the bank account'
type: integer
example: '1'
type: object
BankTransactionRule:
properties:
id:
@ -3816,9 +3599,9 @@ components:
type: object
properties:
message:
description: 'These credentials do not match our records'
description: 'These credentials do not match our records / Invalid Token'
type: string
example: 'These credentials do not match our records'
example: 'These credentials do not match our records / Invalid Token'
ValidationError:
properties:
message:
@ -3833,6 +3616,20 @@ components:
type: string
type: object
type: object
AuthorizationError:
properties:
message:
description: 'Insufficient permissions for this resource.'
type: string
example: 'Insufficient permissions for this resource.'
errors:
properties:
value:
type: array
items:
type: string
type: object
type: object
VendorContact:
properties:
id:
@ -4049,197 +3846,4 @@ components:
description: 'JSON or UBL'
type: string
example: JSON
type: object
parameters:
X-API-SECRET:
name: X-API-SECRET
in: header
description: 'The API secret as defined by the .env variable API_SECRET. Only needed for self hosted users, and only applicable on the login route.'
required: false
schema:
type: string
example: password
X-Requested-With:
name: X-Requested-With
in: header
description: 'Used to send the XMLHttpRequest header'
required: true
schema:
type: string
readOnly: true
example: XMLHttpRequest
X-API-TOKEN:
name: X-API-TOKEN
in: header
description: 'The API token to be used for authentication'
required: true
schema:
type: string
example: TOKEN
X-API-PASSWORD:
name: X-API-PASSWORD
in: header
description: 'The login password when challenged on certain protected routes'
required: false
schema:
type: string
example: supersecretpassword
bank_integration_include:
name: include
in: query
description: Include child relations of the BankIntegration object. Format is comma separated.
require: false
schema:
type: string
examples:
company:
value: company
summary: The associated Company
account:
value: account
summary: The associated Account
bank_transactions:
value: bank_transactions
summary: The associated Bank Transactions
activity_include:
name: include
in: query
description: Include child relations of the Activity object, format is comma separated. **Note** it is possible to chain multiple includes together, ie. include=account,token
required: false
schema:
type: string
examples:
history:
value: history
summary: include=history will include the history object in the response (This could include references to the backup HTML of the entity)
user:
value: user
summary: include=user will include the user object in the response
client:
value: client
summary: include=client will include the client object in the response
recurring_invoice:
value: recurring_invoice
summary: include=recurring_invoice will include the recurring_invoice object in the response
invoice:
value: invoice
summary: include=invoice will include the invoice object in the response
credit:
value: credit
summary: include=credit will include the credit object in the response
quote:
value: quote
summary: include=quote will include the quote object in the response
payment:
value: payment
summary: include=payment will include the payment object in the response
expense:
value: expense
summary: include=expense will include the expense object in the response
vendor_contact:
value: vendor_contact
summary: include=vendor_contact will include the vendor_contact object in the response
vendor:
value: vendor
summary: include=vendor will include the vendor object in the response
purchase_order:
value: purchase_order
summary: include=purchase_order will include the purchase_order object in the response
task:
value: task
summary: include=task will include the task object in the response
login_include:
name: include
in: query
description: Include child relations of the CompanyUser object, format is comma separated. **Note** it is possible to chain multiple includes together, ie. include=account,token
required: false
schema:
type: string
examples:
user:
value: user
summary: include=user will include the user object in the response
company:
value: company
summary: include=company will include the company object in the response
token:
value: token
summary: include=token will include the token object in the response
account:
value: account
summary: include=account will include the account object in the response
per_page_meta:
name: per_page
in: query
description: The number of records to return for each request, default is 20
required: false
schema:
type: int
example: 20
page_meta:
name: page
in: query
description: The page number to return for this request (when performing pagination), default is 1
required: false
schema:
type: int
example: 1
include:
name: include
in: query
description: 'Includes child relationships in the response, format is comma separated. Check each model for the list of associated includes'
required: false
schema:
type: string
example: 'first_load'
include_static:
name: include_static
in: query
description: 'Returns static variables'
required: false
schema:
type: string
example: include_static=true
clear_cache:
name: clear_cache
in: query
description: 'Clears the static cache'
required: false
schema:
type: string
example: clear_cache=true
index:
name: index
in: query
description: 'Replaces the default response index from data to a user specific string'
required: false
schema:
type: string
example: user
api_version:
name: api_version
in: query
description: 'The API version'
required: false
schema:
type: number
example: user
headers:
X-MINIMUM-CLIENT-VERSION:
description: 'The API version'
schema:
type: number
X-RateLimit-Remaining:
description: 'The number of requests left for the time window.'
schema:
type: integer
X-RateLimit-Limit:
description: 'The total number of requests in a given time window.'
schema:
type: integer
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-TOKEN
type: object

View File

@ -0,0 +1,11 @@
Account:
properties:
id:
description: 'The account hashed id'
type: string
example: AS3df3A
account_sms_verified:
description: 'Boolean flag if the account has been verified by sms'
type: string
example: true
type: object

View File

@ -0,0 +1,93 @@
Activity:
properties:
id:
description: 'The id field of the activity'
type: string
example: Opnel5aKBz
activity_type_id:
description: 'The activity type id'
type: string
example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
example: Opnel5aKBz
company_id:
description: 'The company hashed id'
type: string
example: Opnel5aKBz
user_id:
description: 'The user hashed id'
type: string
example: Opnel5aKBz
invoice_id:
description: 'The invoice hashed id'
type: string
example: Opnel5aKBz
payment_id:
description: 'The payment hashed id'
type: string
example: Opnel5aKBz
credit_id:
description: 'The credit hashed id'
type: string
example: Opnel5aKBz
updated_at:
description: 'Unixtimestamp the last time the record was updated'
type: integer
example: '343421434'
expense_id:
description: 'The expense hashed id'
type: string
example: Opnel5aKBz
is_system:
description: 'Defines is the activity was performed by the system'
type: boolean
example: true
contact_id:
description: 'The contact hashed id'
type: string
example: Opnel5aKBz
task_id:
description: 'The task hashed id'
type: string
example: Opnel5aKBz
notes:
description: 'Activity Notes'
type: string
example: Opnel5aKBz
token_id:
description: 'The hashed ID of the token who performed the action'
type: string
example: Opnel5aKBz
ip:
description: 'The IP Address of the user who performed the action'
type: string
example: 192.168.1.252
user:
$ref: '#/components/schemas/User'
client:
$ref: '#/components/schemas/Client'
contact:
$ref: '#/components/schemas/ClientContact'
recurring_invoice:
$ref: '#/components/schemas/RecurringInvoice'
invoice:
$ref: '#/components/schemas/Invoice'
credit:
$ref: '#/components/schemas/Credit'
quote:
$ref: '#/components/schemas/Quote'
payment:
$ref: '#/components/schemas/Payment'
expense:
$ref: '#/components/schemas/Expense'
task:
$ref: '#/components/schemas/Task'
purchase_order:
$ref: '#/components/schemas/PurchaseOrder'
vendor:
$ref: '#/components/schemas/Vendor'
vendor_contact:
$ref: '#/components/schemas/VendorContact'
type: object

View File

@ -0,0 +1,47 @@
BankIntegration:
properties:
id:
description: 'The bank integration hashed id'
type: string
example: AS3df3A
company_id:
description: 'The company hashed id'
type: string
example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
example: AS3df3A
provider_bank_name:
description: 'The providers bank name'
type: string
example: 'Chase Bank'
bank_account_id:
description: 'The bank account id'
type: integer
example: '1233434'
bank_account_name:
description: 'The name of the account'
type: string
example: 'My Checking Acc'
bank_account_number:
description: 'The account number'
type: string
example: '111 234 2332'
bank_account_status:
description: 'The status of the bank account'
type: string
example: ACTIVE
bank_account_type:
description: 'The type of account'
type: string
example: CREDITCARD
balance:
description: 'The current bank balance if available'
type: number
example: '1000000'
currency:
description: 'iso_3166_3 code'
type: string
example: USD
type: object

View File

@ -0,0 +1,55 @@
BankTransaction:
properties:
id:
description: 'The bank integration hashed id'
type: string
example: AS3df3A
company_id:
description: 'The company hashed id'
type: string
example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
example: AS3df3A
transaction_id:
description: 'The id of the transaction rule'
type: integer
example: 343434
amount:
description: 'The transaction amount'
type: number
example: 10
currency_id:
description: 'The currency ID of the currency'
type: string
example: '1'
account_type:
description: 'The account type'
type: string
example: creditCard
description:
description: 'The description of the transaction'
type: string
example: 'Potato purchases for kevin'
category_id:
description: 'The category id'
type: integer
example: 1
category_type:
description: 'The category description'
type: string
example: Expenses
base_type:
description: 'Either CREDIT or DEBIT'
type: string
example: CREDIT
date:
description: 'The date of the transaction'
type: string
example: '2022-09-01'
bank_account_id:
description: 'The ID number of the bank account'
type: integer
example: '1'
type: object

View File

@ -0,0 +1,15 @@
BTRules:
properties:
data_key:
description: 'The key to search'
type: string
example: 'description,amount'
operator:
description: 'The operator flag of the search'
type: string
example: '>'
value:
description: 'The value to search for'
type: string
example: bob
type: object

View File

@ -1,6 +1,6 @@
openapi: 3.0.0
info:
title: 'Invoice Ninja API Reference - Where self host Invoicing lives.'
title: 'Invoice Ninja API Reference - Where self host invoicing lives.'
description: |
---
<br>
@ -15,7 +15,7 @@ info:
license:
name: 'Elastic License'
url: 'https://www.elastic.co/licensing/elastic-license'
version: 1.0.30
version: 5.5.70
servers:
-
url: 'https://demo.invoiceninja.com'

View File

@ -1541,519 +1541,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/clients:
get:
tags:
- clients
summary: 'List clients'
description: |
Lists clients, search and filters allow fine grained lists to be generated.
Query parameters can be added to performed more fine grained filtering of the clients, these are handled by the ClientFilters class which defines the methods available
operationId: getClients
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
$ref: '#/components/parameters/index'
responses:
200:
description: 'A list of clients'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- clients
summary: 'Create client'
description: 'Adds an client to a company'
operationId: storeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
responses:
200:
description: 'Returns the saved client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}':
get:
tags:
- clients
summary: 'Show client'
description: 'Displays a client by id'
operationId: showClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the cl.ient object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
tags:
- clients
summary: 'Update client'
description: 'Handles the updating of a client by id'
operationId: updateClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- clients
summary: 'Delete client'
description: 'Handles the deletion of a client by id'
operationId: deleteClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns a HTTP status'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/edit':
get:
tags:
- clients
summary: 'Edit Client'
description: 'Displays a client by id'
operationId: editClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/clients/create:
get:
tags:
- clients
summary: 'Blank Client'
description: 'Returns a blank object with default values'
operationId: getClientsCreate
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
responses:
200:
description: 'A blank client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/clients/bulk:
post:
tags:
- clients
summary: 'Bulk actions'
description: ''
operationId: bulkClients
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/index'
requestBody:
description: 'User credentials'
required: true
content:
application/json:
schema:
type: array
items:
description: 'Array of hashed IDs to be bulk ''actioned'
type: integer
example: '[0,1,2,3]'
responses:
200:
description: 'The Client User response'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/upload':
put:
tags:
- clients
summary: 'Add client document'
description: 'Handles the uploading of a document to a client'
operationId: uploadClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/purge':
post:
tags:
- clients
summary: 'Purge client'
description: 'Handles purging a client'
operationId: purgeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/{mergeable_client_hashed_id}/merge':
post:
tags:
- clients
summary: 'Merge client'
description: 'Handles merging 2 clients'
operationId: mergeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
-
name: mergeable_client_hashed_id
in: path
description: 'The Mergeable Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/client_gateway_tokens:
get:
tags:
@ -2365,69 +1853,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/client_statement:
post:
tags:
- clients
summary: 'Client statement PDF'
description: 'Return a PDF of the client statement'
operationId: clientStatement
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
requestBody:
description: 'Statment Options'
required: true
content:
application/json:
schema:
properties:
start_date:
description: 'The start date of the statement period - format Y-m-d'
type: string
end_date:
description: 'The start date of the statement period - format Y-m-d'
type: string
client_id:
description: 'The hashed ID of the client'
type: string
show_payments_table:
description: 'Flag which determines if the payments table is shown'
type: boolean
show_aging_table:
description: 'Flag which determines if the aging table is shown'
type: boolean
type: object
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/companies:
get:
tags:

783
openapi/paths/clients.yaml Normal file
View File

@ -0,0 +1,783 @@
/api/v1/clients:
get:
tags:
- clients
summary: 'List clients'
description: |
Lists clients. Fine grained filtering is also available using query parameters.
operationId: getClients
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
$ref: '#/components/parameters/index'
-
name: name
in: query
description: Filter by client name
required: false
schema:
type: string
example: bob
-
name: balance
in: query
description: Filter by client balance, format uses an operator and value separated by a colon. lt,lte, gt, gte, eq
required: false
schema:
type: string
example: lt:10
-
name: between_balance
in: query
description: Filter between client balances, format uses two values separated by a colon
required: false
schema:
type: string
example: 10:100
-
name: email
in: query
description: Filter by client email
required: false
schema:
type: string
example: bob@gmail.com
-
name: id_number
in: query
description: Filter by client id_number
required: false
schema:
type: string
example: a1039883
-
name: number
in: query
description: Filter by client number
required: false
schema:
type: string
example: a1039883
-
name: filter
in: query
description: Filters clients on columns - name, id_number, contact.first_name contact.last_name, contact.email, custom_value1-4
required: false
schema:
type: string
example: a1039883
-
name: sort
in: query
description: Returns the list sorted by column in ascending or descending order.
required: false
schema:
type: string
example: id|desc name|desc balance|asc
responses:
200:
description: 'A list of clients'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- clients
summary: 'Create client'
description: 'Adds an client to a company'
operationId: storeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
responses:
200:
description: 'Returns the saved client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}':
get:
tags:
- clients
summary: 'Show client'
description: 'Displays a client by id'
operationId: showClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the cl.ient object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
put:
tags:
- clients
summary: 'Update client'
description: 'Handles the updating of a client by id'
operationId: updateClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- clients
summary: 'Delete client'
description: 'Handles the deletion of a client by id'
operationId: deleteClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns a HTTP status'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/edit':
get:
tags:
- clients
summary: 'Edit Client'
description: 'Displays a client by id'
operationId: editClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/clients/create:
get:
tags:
- clients
summary: 'Blank Client'
description: 'Returns a blank object with default values'
operationId: getClientsCreate
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
responses:
200:
description: 'A blank client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/clients/bulk:
post:
tags:
- clients
summary: 'Bulk actions'
description: ''
operationId: bulkClients
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/index'
requestBody:
description: 'User credentials'
required: true
content:
application/json:
schema:
type: array
items:
description: 'Array of hashed IDs to be bulk ''actioned'
type: integer
example: '[0,1,2,3]'
responses:
200:
description: 'The Client User response'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/upload':
put:
tags:
- clients
summary: 'Add client document'
description: 'Handles the uploading of a document to a client'
operationId: uploadClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/purge':
post:
tags:
- clients
summary: 'Purge client'
description: 'Handles purging a client'
operationId: purgeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'/api/v1/clients/{id}/{mergeable_client_hashed_id}/merge':
post:
tags:
- clients
summary: 'Merge client'
description: 'Handles merging 2 clients'
operationId: mergeClient
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/client_include'
-
name: id
in: path
description: 'The Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
-
name: mergeable_client_hashed_id
in: path
description: 'The Mergeable Client Hashed ID'
required: true
schema:
type: string
format: string
example: D2J234DFA
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/v1/client_statement:
post:
tags:
- clients
summary: 'Client statement PDF'
description: 'Return a PDF of the client statement'
operationId: clientStatement
parameters:
-
$ref: '#/components/parameters/X-API-TOKEN'
-
$ref: '#/components/parameters/X-Requested-With'
-
$ref: '#/components/parameters/include'
requestBody:
description: 'Statment Options'
required: true
content:
application/json:
schema:
properties:
start_date:
description: 'The start date of the statement period - format Y-m-d'
type: string
end_date:
description: 'The start date of the statement period - format Y-m-d'
type: string
client_id:
description: 'The hashed ID of the client'
type: string
show_payments_table:
description: 'Flag which determines if the payments table is shown'
type: boolean
show_aging_table:
description: 'Flag which determines if the aging table is shown'
type: boolean
type: object
responses:
200:
description: 'Returns the client object'
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
content:
application/json:
schema:
$ref: '#/components/schemas/Client'
401:
description: 'Authentication error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthenticationError'
403:
description: 'Authorization error'
content:
application/json:
schema:
$ref: '#components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
default:
description: 'Unexpected Error'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'

View File

@ -3,6 +3,6 @@
<h1>{{ ctrans('texts.login_link_requested_label') }}</h1>
<p>{{ ctrans('texts.login_link_requested') }}</p>
<a href="{{ $url }}" target="_blank" class="button">Sign in to Invoice Ninja</a>
<a href="{{ $url }}" target="_blank" class="button"> {{ ctrans('texts.login')}}</a>
</div>
@endcomponent