@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api XTRF Home Portal API
@base https://presentation.s.xtrf.eu/home-api
@version 2.0
@auth ApiKey X-AUTH-ACCESS-TOKEN in header
@endpoints 341
@hint download_for_search
@toc browser(26), accounting(29), customers(38), files(1), license(2), macros(1), confidential-groups(9), projectGroups(9), providers(16), reports(7), services(2), settings(1), subscription(4), system(4), users(10), dictionaries(12), jobs(27), projects(67), quotes(61), tasks(15)

@group browser
@endpoint GET /browser/csv
@desc Searches for data (ie. customer, task, etc) and returns it in a CSV form.
@optional {viewId: int(int64) # view's identifier, separator: str # csv field separator, secondarySeparator: str # secondary csv field separator, additionalOrder: str}

@endpoint GET /browser
@desc Searches for data (ie. customer, task, etc) and returns it in a tabular form.
@optional {viewId: int(int64) # view's identifier, page: int(int32)=0, additionalOrder: str, useDeferredColumns: str, maxRows: int(int32)=0 # overrides view's default rows limit, supported values 10 to 1000}

@endpoint GET /browser/views/for/{className}
@desc Returns views' brief.
@required {className: str # views' class name}
@optional {placeName: str=default # place name (denotes specific place in system with the table)}

@endpoint POST /browser/views/for/{className}
@desc Creates view for given class.
@required {className: str # view's class name}

@endpoint GET /browser/views/{viewId}
@desc Returns all view's information.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}
@desc Updates all view's information.
@required {viewId: int(int64) # view's identifier}

@endpoint DELETE /browser/views/{viewId}
@desc Removes a view.
@required {viewId: int(int64) # view's internal identifier}
@returns(204) Success

@endpoint DELETE /browser/views/{viewId}/columns/{columnName}
@desc Deletes a single column from view.
@required {viewId: int(int64) # view's identifier, columnName: str # column's name}

@endpoint GET /browser/views/{viewId}/columns/{columnName}/settings
@desc Returns column's specific settings.
@required {viewId: int(int64) # view's identifier, columnName: str # column's name}

@endpoint PUT /browser/views/{viewId}/columns/{columnName}/settings
@desc Updates column's specific settings.
@required {viewId: int(int64) # view's identifier, columnName: str # column's name}
@example_request "/home-api/assets/examples/browsers/views/updateColumnSettings.json#requestBody"

@endpoint GET /browser/views/{viewId}/columns
@desc Returns columns defined in view.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/columns
@desc Updates columns in view.
@required {viewId: int(int64) # view's identifier}

@endpoint GET /browser/views/details/for/{className}
@desc Returns current view's detailed information, suitable for browser.
@required {className: str # views' class name}
@optional {placeName: str=default # place name (denotes specific place in system with the table)}

@endpoint GET /browser/views/{viewId}/filter
@desc Returns view's filter.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/filter
@desc Updates view's filter.
@required {viewId: int(int64) # view's identifier}

@endpoint GET /browser/views/{viewId}/settings/local
@desc Returns view's local settings (for current user).
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/settings/local
@desc Updates view's local settings (for current user).
@required {viewId: int(int64) # view's identifier}
@optional {maxRows: int(int32), maxLinesInRow: int(int32)}
@example_request "/home-api/assets/examples/browsers/views/updateLocalSettings.json#requestBody"

@endpoint GET /browser/views/{viewId}/order
@desc Returns view's order settings.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/order
@desc Updates view's order settings.
@required {viewId: int(int64) # view's identifier}

@endpoint GET /browser/views/{viewId}/permissions
@desc Returns view's permissions.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/permissions
@desc Updates view's permissions.
@required {viewId: int(int64) # view's identifier}
@optional {sharedGroups: [int(int64)]}
@example_request "/home-api/assets/examples/browsers/views/updatePermissions.json#requestBody"

@endpoint GET /browser/views/{viewId}/settings
@desc Returns view's settings.
@required {viewId: int(int64) # view's identifier}

@endpoint PUT /browser/views/{viewId}/settings
@desc Updates view's settings.
@required {viewId: int(int64) # view's identifier}
@optional {name: str, local: map{maxRows: int(int32), maxLinesInRow: int(int32)}}
@example_request "/home-api/assets/examples/browsers/views/updateSettings.json#requestBody"

@endpoint GET /browser/views/details/for/{className}/{viewId}
@desc Returns view's detailed information, suitable for browser.
@required {className: str # views' class name, viewId: int(int64)}
@optional {placeName: str=default # place name (denotes specific place in system with the table)}

@endpoint POST /browser/views/details/for/{className}/{viewId}
@desc Selects given view as current and returns its detailed information, suitable for browser.
@required {className: str # views' class name, viewId: int(int64)}
@optional {place name (denotes specific place in system with the table): str=default}

@endpoint PUT /browser/views/{viewId}/filter/{filterProperty}
@desc Updates view's filter property.
@required {viewId: int(int64) # view's identifier, filterProperty: str # view's filter property name}
@optional {name: str, type: str, settings: map, settingsPresent: bool}
@example_request "/home-api/assets/examples/browsers/views/updateFilterProperty.json#requestBody"

@endgroup

@group accounting
@endpoint GET /accounting/customers/invoices
@desc Lists all client invoices in all statuses (including not ready and drafts) that have been updated since a specific date.
@optional {updatedSince: int(int64) # only client invoices modified since this timestamp}

@endpoint POST /accounting/customers/invoices
@desc Creates a new invoice.

@endpoint GET /accounting/customers/invoices/{invoiceId}/payments
@desc Returns all payments for the client invoice.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint POST /accounting/customers/invoices/{invoiceId}/payments
@desc Adds a new payment to the client invoice. The invoice payment status (Not Paid, Partially Paid, Fully Paid) is automatically recalculated.
@required {invoiceId: int(int64) # client invoice's internal identifier}
@returns(204) Success

@endpoint GET /accounting/customers/invoices/{invoiceId}
@desc Returns client invoice details.
@required {invoiceId: int(int64) # client invoice's internal identifier}
@optional {embed: str # list of adittional fields which should be embedded in the response (ie. tasks)}

@endpoint DELETE /accounting/customers/invoices/{invoiceId}
@desc Removes a client invoice.
@required {invoiceId: int(int64) # client invoice's internal identifier}
@returns(204) Success

@endpoint POST /accounting/customers/invoices/documents
@desc Allows for downloading multiple client invoice documents.

@endpoint POST /accounting/customers/invoices/xmlDocuments
@desc Allows for downloading multiple client invoice xml documents.

@endpoint POST /accounting/customers/invoices/{invoiceId}/duplicate
@desc Duplicate client invoice.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint POST /accounting/customers/invoices/{invoiceId}/duplicate/proForma
@desc Duplicate client invoice as pro forma.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint GET /accounting/customers/invoices/ids
@desc Returns client invoices' internal identifiers.
@optional {updatedSince: int(int64) # only client invoices modified since this timestamp}

@endpoint GET /accounting/customers/invoices/{invoiceId}/dates
@desc Returns dates of a given client invoice.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint GET /accounting/customers/invoices/{invoiceId}/document
@desc Allows for downloading a given client invoice document.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint GET /accounting/customers/invoices/{invoiceId}/paymentTerms
@desc Returns payment terms of a given client invoice.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint GET /accounting/customers/invoices/{invoiceId}/xmlDocument
@desc Allows for downloading a given client invoice xml document.
@required {invoiceId: int(int64) # client invoice's internal identifier}

@endpoint POST /accounting/customers/invoices/{invoiceId}/sendReminder
@desc Sends reminder.
@required {invoiceId: int(int64) # client invoice's internal identifier}
@returns(204) Success

@endpoint POST /accounting/customers/invoices/sendReminders
@desc Sends reminders. Returns number of sent e-mails.

@endpoint DELETE /accounting/customers/payments/{paymentId}
@desc Removes a customer payment.
@required {paymentId: int(int64) # customer payment's internal identifier}
@returns(204) Success

@endgroup

@group customers
@endpoint POST /customers/persons
@desc Creates a new person.

@endpoint GET /customers/persons/{personId}
@desc Returns person details.
@required {personId: int(int64) # person's internal identifier}

@endpoint PUT /customers/persons/{personId}
@desc Updates an existing person.
@required {personId: int(int64) # person's internal identifier}

@endpoint DELETE /customers/persons/{personId}
@desc Removes a person.
@required {personId: int(int64) # person's internal identifier}
@returns(204) Success

@endpoint POST /customers/persons/accessToken
@desc Generates a single use sign-in token.

@endpoint GET /customers/persons/ids
@desc Returns persons' internal identifiers.
@optional {updatedSince: int(int64) # only persons modified since this timestamp}

@endpoint GET /customers/persons/{personId}/contact
@desc Returns contact of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint PUT /customers/persons/{personId}/contact
@desc Updates contact of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint GET /customers/persons/{personId}/customFields
@desc Returns custom fields of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint PUT /customers/persons/{personId}/customFields
@desc Updates custom fields of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint DELETE /customers/priceLists/{priceListId}
@desc Removes a customer price list.
@required {priceListId: int(int64) # customer price list's internal identifier}
@returns(204) Success

@endpoint GET /customers
@desc Returns list of simple clients representations
@optional {updatedSince: int(int64) # only clients modified since this timestamp, excludeErased: bool # filter out erased clients; default: false}

@endpoint POST /customers
@desc Creates a new client.
@optional {id: int(int64), idNumber: str, name: str, fullName: str, notes: str, peppolIdScheme: str, peppolIdCode: str, peppolId: str, billingAddress: map{sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}, correspondenceAddress: map{sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}, contact: map{phones: [str], sms: str, fax: str, emails: map, websites: [str]}, branchId: int(int64), leadSourceId: int(int64), customFields: [map{type: str, name: str, key: str, value: map}], status: str(ACTIVE/INACTIVE/POTENTIAL), responsiblePersons: map{projectManagerId!: int(int64), salesPersonId!: int(int64), accountManagerId: int(int64), projectCoordinatorId: int(int64)}, accounting: map{taxNumbers: [map]}, contractNumber: str, salesNotes: str, accountOnCustomerServer: str, clientFirstProjectDate: str(date-time), clientFirstQuoteDate: str(date-time), clientLastProjectDate: str(date-time), clientLastQuoteDate: str(date-time), clientNumberOfProjects: int(int32), clientNumberOfQuotes: int(int32), persons: [map{id: int(int64), name: str, lastName: str, contact: map, positionId: int(int64), gender: str, active: bool, motherTonguesIds: [int(int64)], customFields: [map], customerId: int(int64), firstProjectDate: str(date-time), firstQuoteDate: str(date-time), lastProjectDate: str(date-time), lastQuoteDate: str(date-time), numberOfProjects: int(int32), numberOfQuotes: int(int32)}], categoriesIds: [int(int64)], industriesIds: [int(int64)], limitAccessToPeopleResponsible: bool}
@example_request "/home-api/assets/examples/customers/create.json#requestBody"

@endpoint GET /customers/{customerId}
@desc Returns client details.
@required {customerId: int(int64) # client's internal identifier}
@optional {embed: str # list of additional fields which should be embedded in the response (available options: persons)}

@endpoint PUT /customers/{customerId}
@desc Updates an existing client.
@required {customerId: int(int64) # client's internal identifier}
@optional {id: int(int64), idNumber: str, name: str, fullName: str, notes: str, peppolIdScheme: str, peppolIdCode: str, peppolId: str, billingAddress: map{sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}, correspondenceAddress: map{sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}, contact: map{phones: [str], sms: str, fax: str, emails: map, websites: [str]}, branchId: int(int64), leadSourceId: int(int64), customFields: [map{type: str, name: str, key: str, value: map}], status: str(ACTIVE/INACTIVE/POTENTIAL), responsiblePersons: map{projectManagerId!: int(int64), salesPersonId!: int(int64), accountManagerId: int(int64), projectCoordinatorId: int(int64)}, accounting: map{taxNumbers: [map]}, contractNumber: str, salesNotes: str, accountOnCustomerServer: str, clientFirstProjectDate: str(date-time), clientFirstQuoteDate: str(date-time), clientLastProjectDate: str(date-time), clientLastQuoteDate: str(date-time), clientNumberOfProjects: int(int32), clientNumberOfQuotes: int(int32), persons: [map{id: int(int64), name: str, lastName: str, contact: map, positionId: int(int64), gender: str, active: bool, motherTonguesIds: [int(int64)], customFields: [map], customerId: int(int64), firstProjectDate: str(date-time), firstQuoteDate: str(date-time), lastProjectDate: str(date-time), lastQuoteDate: str(date-time), numberOfProjects: int(int32), numberOfQuotes: int(int32)}], categoriesIds: [int(int64)], industriesIds: [int(int64)], limitAccessToPeopleResponsible: bool}
@example_request "/home-api/assets/examples/customers/update.json#requestBody"

@endpoint DELETE /customers/{customerId}
@desc Removes a client.
@required {customerId: int(int64) # client's internal identifier}
@returns(204) Success

@endpoint GET /customers/{customerId}/priceProfiles/active
@desc Returns list of active price profiles for a client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint GET /customers/{customerId}/address
@desc Returns address of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/address
@desc Updates address of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {sameAsBillingAddress: bool # should billing address be used instead of this one, addressLine1: str # first line of address, addressLine2: str # second line of address, city: str # city, postalCode: str # postal code, provinceId: int(int64) # province, countryId: int(int64) # country}
@example_request "/home-api/assets/examples/customers/address/updateAddress.json#requestBody"

@endpoint GET /customers/ids
@desc Returns clients' internal identifiers.
@optional {updatedSince: int(int64) # only clients modified since this timestamp, nameEquals: str # exact name of client, emailEquals: str # exact email of client}

@endpoint GET /customers/{customerId}/budgetCodes
@desc Returns list of available budget codes for a client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint GET /customers/byAlias
@desc Returns client details.
@optional {externalSystemId: int(int64), customerAlias: str}

@endpoint GET /customers/{customerId}/categories
@desc Returns categories of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/categories
@desc Updates categories of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {empty: bool}
@example_request "/home-api/assets/examples/customers/updateCategories.json#requestBody"

@endpoint GET /customers/{customerId}/contact
@desc Returns contact of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/contact
@desc Updates contact of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {phones: [str] # phones' numbers, sms: str # mobile phone for which SMS notifications will be sent (if configured), fax: str # fax number, emails: map{primary!: str, cc: [str], additional: [str]} # emails, websites: [str] # websites}
@example_request "/home-api/assets/examples/customers/updateContact.json#requestBody"

@endpoint GET /customers/{customerId}/correspondenceAddress
@desc Returns correspondence address of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/correspondenceAddress
@desc Updates correspondence address of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {sameAsBillingAddress: bool # should billing address be used instead of this one, addressLine1: str # first line of address, addressLine2: str # second line of address, city: str # city, postalCode: str # postal code, provinceId: int(int64) # province, countryId: int(int64) # country}
@example_request "/home-api/assets/examples/customers/address/updateCorrespondenceAddress.json#requestBody"

@endpoint GET /customers/{customerId}/customFields/{customFieldKey}
@desc Returns custom field of a given client.
@required {customerId: int(int64) # client's internal identifier, customFieldKey: str # custom field's key}

@endpoint PUT /customers/{customerId}/customFields/{customFieldKey}
@desc Updates given custom field of a given client.
@required {customerId: int(int64) # client's internal identifier, customFieldKey: str # custom field's key}
@optional {type: str(TEXT/DATE/DATE_AND_TIME/NUMBER/CHECKBOX/SELECTION/MULTI_SELECTION), name: str, key: str, value: map}
@example_request "/home-api/assets/examples/customers/updateCustomField.json#requestBody"

@endpoint GET /customers/{customerId}/customFields
@desc Returns custom fields of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/customFields
@desc Updates custom fields of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@example_request "/home-api/assets/examples/customers/updateCustomFields.json#requestBody"

@endpoint GET /customers/{customerId}/settings/specializations
@desc Returns specializations available for a given client in the Client Portal.
@required {customerId: int(int64) # client's internal identifier}

@endpoint GET /customers/{customerId}/industries
@desc Returns industries of a given client.
@required {customerId: int(int64) # client's internal identifier}

@endpoint PUT /customers/{customerId}/industries
@desc Updates industries of a given client.
@required {customerId: int(int64) # client's internal identifier}
@optional {empty: bool}
@example_request "/home-api/assets/examples/customers/updateIndustries.json#requestBody"

@endpoint GET /customers/{customerId}/settings/languages
@desc Returns languages available for a given client in the Client Portal.
@required {customerId: int(int64) # client's internal identifier}

@endpoint GET /customers/{customerId}/offices
@desc Returns list of offices in the office structure in which the client is located.
@required {customerId: int(int64) # client's internal identifier}

@endpoint GET /customers/{customerId}/services
@desc Returns list of available services for a client.
@required {customerId: int(int64) # client's internal identifier}

@endgroup

@group files
@endpoint POST /files
@desc Uploads a temporary file (ie. for XML import). Returns token which can be used in other API calls.

@endgroup

@group license
@endpoint GET /license
@desc Returns license content.
@returns(200) Success

@endpoint POST /license/refresh
@desc Refreshes license content.
@returns(204) Success

@endgroup

@group macros
@endpoint POST /macros/{macroId}/run
@desc Executes a macro.
@required {macroId: int(int64) # macro internal identifier}

@endgroup

@group confidential-groups
@endpoint POST /confidential-groups/sensitiveClients/client
@desc Adds client to sensitive clients list.
@optional {value: int(int64), text: str}
@example_request "/home-api/assets/examples/partnersGroups/sensitiveClients/addClient_valueFix.json#requestBody"

@endpoint GET /confidential-groups/sensitiveClients
@desc Returns sensitive clients list.

@endpoint PUT /confidential-groups/sensitiveClients
@desc Updates sensitive clients list.
@example_request "/home-api/assets/examples/partnersGroups/sensitiveClients/put.json#requestBody"

@endpoint GET /confidential-groups/sensitiveClients/isSensitive/{clientId}
@desc Check if client is sensitive.
@required {clientId: int(int64), clientId: int(int64)}

@endpoint DELETE /confidential-groups/sensitiveClients/client/{sensitiveClientId}
@desc Removes sensitive client from sensitive clients list.
@required {sensitiveClientId: int(int64), sensitiveClientId: int(int64)}

@endpoint POST /confidential-groups/trustedVendors/vendor
@desc Adds vendor to trusted vendors list.
@optional {value: int(int64), text: str}
@example_request "/home-api/assets/examples/partnersGroups/trustedVendors/addVendor_valueFix.json#requestBody"

@endpoint GET /confidential-groups/trustedVendors
@desc Returns trusted vendors list.

@endpoint PUT /confidential-groups/trustedVendors
@desc Updates trusted vendors list.
@example_request "/home-api/assets/examples/partnersGroups/trustedVendors/put.json#requestBody"

@endpoint DELETE /confidential-groups/trustedVendors/vendor/{trustedVendorId}
@desc Removes trusted vendor from trusted vendors list.
@required {trustedVendorId: int(int64), trustedVendorId: int(int64)}

@endgroup

@group projectGroups
@endpoint GET /projectGroups
@desc Returns all project groups.

@endpoint POST /projectGroups
@desc Creates a new Project Groups.
@optional {name: str, customerIds: [int(int64)]}
@example_request "/home-api/assets/examples/projectGroups/addProjectGroup.json#requestBody"

@endpoint GET /projectGroups/{projectGroupId}
@desc Returns project group details.
@required {projectGroupId: int(int64) # project group's internal identifier}

@endpoint PUT /projectGroups/{projectGroupId}
@desc Update project group details.
@required {projectGroupId: int(int64) # project group's internal identifier}
@optional {currencyId: int(int64), budgetValue: num, name: str, status: str(opened/closed), notes: str, categoriesIds: [int(int64)], customersIds: [int(int64)]}
@example_request "/home-api/assets/examples/projectGroups/updateProjectGroup.json#requestBody"

@endpoint DELETE /projectGroups/{projectGroupId}
@desc Removes a project group.
@required {projectGroupId: int(int64) # project group's internal identifier}
@returns(204) Success

@endpoint PUT /projectGroups/{projectGroupId}/linkProjects
@desc Add projects to project group.
@required {projectGroupId: int(int64) # project group's internal identifier}
@optional {projectIds: [int(int64)], smartProjectIds: [str]}
@example_request "/home-api/assets/examples/projectGroups/linkProjects.json#requestBody"

@endpoint PUT /projectGroups/{projectGroupId}/linkQuotes
@desc Add quotes to project group.
@required {projectGroupId: int(int64) # project group's internal identifier}
@optional {quoteIds: [int(int64)], smartQuoteIds: [str]}
@example_request "/home-api/assets/examples/projectGroups/linkQuotes.json#requestBody"

@endpoint PUT /projectGroups/{projectGroupId}/unlinkProjects
@desc Remove projects from project group.
@required {projectGroupId: int(int64) # project group's internal identifier}
@optional {projectIds: [int(int64)], smartProjectIds: [str]}
@example_request "/home-api/assets/examples/projectGroups/unlinkProjects.json#requestBody"

@endpoint PUT /projectGroups/{projectGroupId}/unlinkQuotes
@desc Remove quotes from project group.
@required {projectGroupId: int(int64) # project group's internal identifier}
@optional {quoteIds: [int(int64)], smartQuoteIds: [str]}
@example_request "/home-api/assets/examples/projectGroups/unlinkQuotes.json#requestBody"

@endgroup

@group accounting
@endpoint GET /accounting/providers/invoices
@desc Lists all vendor invoices in all statuses (including not ready and drafts) that have been updated since a specific date.
@optional {updatedSince: int(int64) # only vendor invoices modified since this timestamp}

@endpoint POST /accounting/providers/invoices
@desc Creates a new invoice.
@optional {jobsIds: [int(int64)]}
@returns(200) Success
@example_request "/home-api/assets/examples/accounting/providers/invoices/createSingleFromJobs.json#requestBody"

@endpoint GET /accounting/providers/invoices/{invoiceId}/payments
@desc Returns all payments for the vendor invoice.
@required {invoiceId: int(int64) # vendor invoice's internal identifier}

@endpoint POST /accounting/providers/invoices/{invoiceId}/payments
@desc Creates a new payment on the vendor account and assigns the payment to the invoice.
@required {invoiceId: int(int64) # vendor invoice's internal identifier}
@returns(204) Success

@endpoint GET /accounting/providers/invoices/{invoiceId}
@desc Returns provider invoice details.
@required {invoiceId: int(int64) # provider invoice's internal identifier}

@endpoint DELETE /accounting/providers/invoices/{invoiceId}
@desc Removes a provider invoice.
@required {invoiceId: int(int64) # provider invoice's internal identifier}
@returns(204) Success

@endpoint GET /accounting/providers/invoices/ids
@desc Returns vendor invoices' internal identifiers.
@optional {updatedSince: int(int64) # only vendor invoices modified since this timestamp}

@endpoint GET /accounting/providers/invoices/{invoiceId}/document
@desc Generates provider invoice document (PDF).
@required {invoiceId: int(int64) # provider invoice's internal identifier}

@endpoint POST /accounting/providers/invoices/{invoiceId}/send
@desc Sends a provider invoice.
@required {invoiceId: int(int64) # provider invoice's internal identifier}
@returns(204) Success

@endpoint POST /accounting/providers/invoices/{invoiceId}/status
@desc Changes invoice status to given status.
@required {invoiceId: int(int64) # provider invoice's internal identifier}
@optional {status: str(POSTPONED/TO_BE_SENT/SENT/CONFIRMED/BILL_CREATED)}
@returns(204) Success
@example_request "/home-api/assets/examples/accounting/providers/invoices/setStatus.json#requestBody"

@endpoint DELETE /accounting/providers/payments/{paymentId}
@desc Removes a provider payment.
@required {paymentId: int(int64) # provider payment's internal identifier}
@returns(204) Success

@endgroup

@group providers
@endpoint GET /providers/persons/{personId}
@desc Returns person details.
@required {personId: int(int64) # person's internal identifier}

@endpoint DELETE /providers/persons/{personId}
@desc Removes a person.
@required {personId: int(int64) # person's internal identifier}
@returns(204) Success

@endpoint GET /providers/persons/ids
@desc Returns persons' internal identifiers.
@optional {updatedSince: int(int64) # only persons modified since this timestamp}

@endpoint GET /providers/persons/{personId}/contact
@desc Returns contact of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint GET /providers/persons/{personId}/customFields
@desc Returns custom fields of a given person.
@required {personId: int(int64) # person's internal identifier}

@endpoint POST /providers/persons/{personId}/notification/invitation
@desc Sends invitation to Vendor Portal.
@required {personId: int(int64) # person's internal identifier}

@endpoint DELETE /providers/priceLists/{priceListId}
@desc Removes a provider price list.
@required {priceListId: int(int64) # provider price list's internal identifier}
@returns(204) Success

@endpoint GET /providers/{providerId}
@desc Returns provider details.
@required {providerId: int(int64) # provider's internal identifier}
@optional {embed: str # list of adittional fields which should be embedded in the response (ie. persons)}

@endpoint DELETE /providers/{providerId}
@desc Removes a provider.
@required {providerId: int(int64) # provider's internal identifier}
@returns(204) Success

@endpoint GET /providers/{providerId}/address
@desc Returns address of a given provider.
@required {providerId: int(int64) # provider's internal identifier}

@endpoint GET /providers/ids
@desc Returns providers' internal identifiers.
@optional {updatedSince: int(int64) # only providers modified since this timestamp}

@endpoint GET /providers/{providerId}/competencies
@desc Returns competencies of a given provider.
@required {providerId: int(int64) # provider's internal identifier}

@endpoint GET /providers/{providerId}/contact
@desc Returns contact of a given provider.
@required {providerId: int(int64) # provider's internal identifier}

@endpoint GET /providers/{providerId}/correspondenceAddress
@desc Returns correspondence address of a given provider.
@required {providerId: int(int64) # provider's internal identifier}

@endpoint GET /providers/{providerId}/customFields
@desc Returns custom fields of a given provider.
@required {providerId: int(int64) # provider's internal identifier}

@endpoint POST /providers/{providerId}/notification/invitation
@desc Sends invitations to Vendor Portal.
@required {providerId: int(int64) # provider's internal identifier}

@endgroup

@group reports
@endpoint DELETE /reports/{reportId}
@desc Removes a report.
@required {reportId: int(int64) # report's internal identifier}
@returns(204) Success

@endpoint POST /reports/{reportId}/duplicate
@desc Duplicates a report.
@required {reportId: int(int64) # report's internal identifier}
@returns(204) Success

@endpoint POST /reports/export/xml
@desc Exports reports definition to XML.

@endpoint GET /reports/{reportId}/result/csv
@desc Generates CSV content for a report.
@required {reportId: int(int64) # report's internal identifier}

@endpoint GET /reports/{reportId}/result/printerFriendly
@desc Generates printer friendly content for a report.
@required {reportId: int(int64) # report's internal identifier}

@endpoint POST /reports/import/xml
@desc Imports reports definition from XML.

@endpoint PUT /reports/{reportId}/preferred
@desc Marks report as preferred or not.
@required {reportId: int(int64) # report's internal identifier}
@returns(204) Success

@endgroup

@group services
@endpoint GET /services/all
@desc Returns services list
@optional {nameEquals: str # exact name of entity}

@endpoint GET /services/active
@desc Returns active services list
@optional {nameEquals: str # exact name of entity}

@endgroup

@group settings
@endpoint GET /settings/customFields
@desc Returns Custom Fields configuration.
@optional {scope: [str] # Custom Field scopes to filter by (available options: CONTACT_PERSON, CUSTOMER, PROVIDER, USER, PROJECT, QUOTE, ACTIVITY, TASK)}
@returns(200) Success

@endgroup

@group subscription
@endpoint GET /subscription/supports
@desc This method can be used to determine if hooks are supported.

@endpoint GET /subscription
@desc Returns all subscriptions

@endpoint POST /subscription
@desc Subscribe to event
@returns(201) Success
@errors {409: Success}

@endpoint DELETE /subscription/{subscriptionId}
@desc Unsubscribe from event
@required {subscriptionId: str}
@returns(200) Success

@endgroup

@group system
@endpoint GET /system/configuration/email
@desc Get email configuration
@returns(200) Email configuration retrieved successfully

@endpoint GET /system/configuration/ftp
@desc Get FTP configuration
@returns(200) FTP configuration retrieved successfully

@endpoint GET /system/configuration
@desc Get basic system configuration
@returns(200) System configuration retrieved successfully

@endpoint GET /system/timeZone
@desc Get system timezone information
@returns(200) Timezone information retrieved successfully

@endgroup

@group users
@endpoint PUT /users/{userId}/password
@desc Sets user's password to a new value.
@required {userId: int(int64) # user's internal identifier}
@returns(204) Success

@endpoint GET /users
@desc Returns list of simple users representations

@endpoint GET /users/{userId}
@desc Returns user details.
@required {userId: int(int64) # user's internal identifier}

@endpoint PUT /users/{userId}
@desc Updates an existing user.
@required {userId: int(int64) # user's internal identifier}
@optional {id: int(int64), firstName: str, lastName: str, login: str, email: str, userGroupName: str, mobilePhone: str, gender: str, timeZoneId: str, positionName: str, phone: str, customFields: [map{type: str, name: str, key: str, value: map}]}
@example_request "/home-api/assets/examples/users/update2.json#requestBody"

@endpoint GET /users/{userId}/customFields/{customFieldKey}
@desc Returns custom field of a given user.
@required {userId: int(int64) # user's internal identifier, customFieldKey: str # custom field's key}

@endpoint PUT /users/{userId}/customFields/{customFieldKey}
@desc Updates given custom field of a given user.
@required {userId: int(int64) # user's internal identifier, customFieldKey: str # custom field's key}
@optional {type: str(TEXT/DATE/DATE_AND_TIME/NUMBER/CHECKBOX/SELECTION/MULTI_SELECTION), name: str, key: str, value: map}
@example_request "/home-api/assets/examples/users/updateCustomField.json#requestBody"

@endpoint GET /users/{userId}/customFields
@desc Returns custom fields of a given user.
@required {userId: int(int64) # user's internal identifier}

@endpoint PUT /users/{userId}/customFields
@desc Updates custom fields of a given user.
@required {userId: int(int64) # user's internal identifier}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@example_request "/home-api/assets/examples/users/updateCustomFields.json#requestBody"

@endpoint GET /users/me
@desc Returns currently signed in user details.

@endpoint GET /users/me/timeZone
@desc Returns time zone preferred by user currently signed in.

@endgroup

@group dictionaries
@endpoint GET /dictionaries/active
@desc Returns active dictionary entities for all types.

@endpoint GET /dictionaries/{type}/active
@desc Returns active values from a given dictionary.
@required {type: str # dictionary type}
@optional {nameEquals: str # exact name of entity}

@endpoint GET /dictionaries/all
@desc Returns dictionary entities for all types. Both active and not active ones.

@endpoint GET /dictionaries/{type}/all
@desc Returns all values (both active and not active) from a given dictionary.
@required {type: str # dictionary type}
@optional {nameEquals: str # exact name of entity}

@endpoint GET /dictionaries/{type}/{id}
@desc Returns specific value from a given dictionary.
@required {type: str # dictionary type, id: int(int64) # dictionary value identifier}

@endpoint GET /dictionaries/{type}/all/default
@desc Returns a default value from a given dictionary.
@required {type: str # dictionary type}

@endpoint GET /dictionaries/currency/{isoCode}/exchangeRate
@desc Returns currency exchange rates.
@required {isoCode: str # iso code, https://www.xe.com/iso4217.php}

@endpoint POST /dictionaries/currency/{isoCode}/exchangeRate
@desc Adding currency exchange rates.
@required {isoCode: str # iso code, https://www.xe.com/iso4217.php}
@optional {exchangeRate: str, dateFrom: map{value: int(int64)}, originDetails: str, publicationDate: map{value: int(int64)}, lastModification: map{value: int(int64)}}
@returns(204) Success
@example_request "/home-api/assets/examples/dictionaries/currency/createExchangeRate.json#requestBody"

@endgroup

@group jobs
@endpoint POST /jobs/{jobId}/files/output
@required {jobId: str # job's internal identifier}

@endpoint PUT /jobs/{jobId}/vendor
@desc Assigns vendor to a job in a project.
@required {jobId: str # job's internal identifier}
@optional {vendorPriceProfileId: int(int64), recalculateRates: bool}
@returns(204) Success
@example_request "/home-api/assets/examples/v1/jobs/assignVendor.json#requestBody"

@endpoint PUT /jobs/{jobId}/status
@desc Changes job status if possible (400 Bad Request is returned otherwise).
@required {jobId: str # job's internal identifier}
@optional {externalId: str, bundleFrom: int(int64), status: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v1/jobs/changeStatus.json#requestBody"

@endpoint GET /jobs/{jobId}
@desc Returns job details by jobId.
@required {jobId: str # job's internal identifier}

@endpoint GET /jobs/{jobId}/files
@desc Returns list of input and output files of a job.
@required {jobId: str # job's internal identifier}
@returns(200) Success

@endpoint GET /jobs/{jobId}/files/{fileId}
@desc Returns file metadata.
@required {jobId: str # job's internal identifier, fileId: int(int64) # file's internal identifier}
@returns(200) Success

@endpoint PUT /jobs/{jobId}/dates
@desc Updates dates of a given job.
@required {jobId: str # job's internal identifier}
@optional {startDate: int(int64), deadline: int(int64), actualStartDate: int(int64), actualEndDate: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v1/jobs/updateDates.json#requestBody"

@endpoint PUT /jobs/{jobId}/instructions
@desc Updates instructions for a job.
@required {jobId: str # job's internal identifier}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v1/jobs/updateInstructionsForJob.json#requestBody"

@endgroup

@group projects
@endpoint POST /projects
@desc Creates a new Classic Project.

@endpoint POST /projects/{projectId}/languageCombinations
@desc Creates a new language combination for a given project without creating a task.
@required {projectId: str # project's internal identifier}
@optional {sourceLanguageId: int(int64), targetLanguageId: int(int64)}
@example_request "/home-api/assets/examples/v1/projects/createLanguageCombination.json#requestBody"

@endpoint POST /projects/{projectId}/finance/payables
@desc Adds a payable to a project.
@required {projectId: str # project's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map, catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v1/projects/createPayable.json#requestBody"

@endpoint POST /projects/{projectId}/finance/receivables
@desc Adds a receivable to a project.
@required {projectId: str # project's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64), catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v1/projects/createReceivable.json#requestBody"

@endpoint POST /projects/{projectId}/tasks
@desc Creates a new task for a given project.
@required {projectId: str # project's internal identifier}
@optional {name: str # name, clientTaskPONumber: str # client task PO number, languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)} # language combination (ie. PL -> EN), dates: map{startDate: map, deadline: map, actualStartDate: map, actualDeliveryDate: map}, people: map{responsiblePersons: map, customerContacts: map} # people, instructions: map{fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}, specializationId: int(int64) # specialization, workflowId: int(int64) # workflow, files: [map{name: str, url: str, content: str, token: str, category: str}] # files}
@example_request "/home-api/assets/examples/v1/projects/createTask.json#requestBody"

@endpoint GET /projects/{projectId}
@desc Returns project details.
@required {projectId: str # project's internal identifier}
@optional {embed: str # list of additional fields which should be embedded in the response (available options: tasks)}

@endpoint DELETE /projects/{projectId}
@desc Removes a project.
@required {projectId: str # project's internal identifier}
@returns(204) Success

@endpoint PUT /projects/{projectId}/finance/payables/{payableId}
@desc Updates a simple payable.
@required {projectId: str # project's internal identifier, payableId: int(int64) # payable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map}
@example_request "/home-api/assets/examples/v1/projects/updatePayable.json#requestBody"

@endpoint DELETE /projects/{projectId}/finance/payables/{payableId}
@desc Deletes a payable.
@required {projectId: str # project's internal identifier, payableId: int(int64) # payable's internal identifier}
@returns(204) Success

@endpoint PUT /projects/{projectId}/finance/receivables/{receivableId}
@desc Updates a simple receivable.
@required {projectId: str # project's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64)}
@example_request "/home-api/assets/examples/v1/projects/updateReceivable.json#requestBody"

@endpoint DELETE /projects/{projectId}/finance/receivables/{receivableId}
@desc Deletes a receivable.
@required {projectId: str # project's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@returns(204) Success

@endpoint GET /projects/ids
@desc Returns projects' internal identifiers.
@optional {updatedSince: int(int64) # only projects modified since this timestamp}

@endpoint GET /projects/{projectId}/contacts
@desc Returns contacts of a given project.
@required {projectId: str # project's internal identifier}

@endpoint PUT /projects/{projectId}/contacts
@desc Updates contacts of a given project.
@required {projectId: str # project's internal identifier}
@optional {primaryId: int(int64), sendBackToId: int(int64), additionalIds: [int(int64)]}
@example_request "/home-api/assets/examples/v1/projects/updateContacts.json#requestBody"

@endpoint GET /projects/{projectId}/customFields
@desc Returns custom fields of a given project.
@required {projectId: str # project's internal identifier}

@endpoint PUT /projects/{projectId}/customFields
@desc Updates custom fields of a given project.
@required {projectId: str # project's internal identifier}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@example_request "/home-api/assets/examples/v1/projects/updateCustomFields.json#requestBody"

@endpoint GET /projects/{projectId}/dates
@desc Returns dates of a given project.
@required {projectId: str # project's internal identifier}

@endpoint PUT /projects/{projectId}/dates
@desc Updates dates of a given project.
@required {projectId: str # project's internal identifier}
@optional {startDate: map{value: int(int64)}, deadline: map{value: int(int64)}, actualStartDate: map{value: int(int64)}, actualDeliveryDate: map{value: int(int64)}}
@example_request "/home-api/assets/examples/v1/projects/updateDates.json#requestBody"

@endpoint GET /projects/files/{fileId}/download
@desc Downloads a file.
@required {fileId: str # file's internal identifier}

@endpoint GET /projects/{projectId}/finance
@desc Returns finance of a given project.
@required {projectId: str # project's internal identifier}

@endpoint GET /projects/{projectId}/instructions
@desc Returns instructions of a given project.
@required {projectId: str # project's internal identifier}

@endpoint PUT /projects/{projectId}/instructions
@desc Updates instructions of a given project.
@required {projectId: str # project's internal identifier}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@example_request "/home-api/assets/examples/v1/projects/updateInstructions.json#requestBody"

@endgroup

@group quotes
@endpoint POST /quotes/{quoteId}/languageCombinations
@desc Creates a new language combination for a given quote without creating a task.
@required {quoteId: str # quote's internal identifier}
@optional {sourceLanguageId: int(int64), targetLanguageId: int(int64)}
@example_request "/home-api/assets/examples/v1/quotes/createLanguageCombination.json#requestBody"

@endpoint POST /quotes/{quoteId}/finance/payables
@desc Adds a payable.
@required {quoteId: str # quote's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map, catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v1/quotes/createCATPayable.json#requestBody"

@endpoint POST /quotes/{quoteId}/finance/receivables
@desc Adds a receivable.
@required {quoteId: str # quote's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64), catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v1/quotes/createReceivable.json#requestBody"

@endpoint POST /quotes/{quoteId}/tasks
@desc Creates a new task for a given quote.
@required {quoteId: str # quote's internal identifier}
@optional {id: int(int64) # internal identifier, idNumber: str # identifier, projectId: int(int64) # project's internal identifier, quoteId: int(int64) # quote's internal identifier, name: str # name, clientTaskPONumber: str # client task PO number, languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)} # language combination (ie. PL -> EN), dates: map{startDate: map, deadline: map, actualStartDate: map, actualDeliveryDate: map}, people: map{responsiblePersons: map, customerContacts: map} # people, instructions: map{fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}, customFields: [map{type: str, name: str, key: str, value: map}], finance: map{invoiceable: bool} # finance, jobs: map{jobCount: int(int32), jobIds: [int(int64)]}}
@example_request "/home-api/assets/examples/v1/quotes/createTask.json#requestBody"

@endpoint GET /quotes/{quoteId}
@desc Returns quote details.
@required {quoteId: str # quote's internal identifier}
@optional {embed: str # list of adittional fields which should be embedded in the response (ie. tasks)}

@endpoint DELETE /quotes/{quoteId}
@desc Removes a quote.
@required {quoteId: str # quote's internal identifier}
@returns(204) Success

@endpoint PUT /quotes/{quoteId}/finance/payables/{payableId}
@desc Updates a simple payable.
@required {quoteId: str # quote's internal identifier, payableId: int(int64) # payable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map}
@example_request "/home-api/assets/examples/v1/quotes/updatePayable.json#requestBody"

@endpoint DELETE /quotes/{quoteId}/finance/payables/{payableId}
@desc Deletes a payable.
@required {quoteId: str # quoteId's internal identifier, payableId: int(int64) # payable's internal identifier}
@returns(204) Success

@endpoint PUT /quotes/{quoteId}/finance/receivables/{receivableId}
@desc Updates a simple receivable.
@required {quoteId: str # quote's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64)}
@example_request "/home-api/assets/examples/v1/quotes/updateReceivable.json#requestBody"

@endpoint DELETE /quotes/{quoteId}/finance/receivables/{receivableId}
@desc Deletes a receivable.
@required {quoteId: str # quoteId's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@returns(204) Success

@endpoint GET /quotes/ids
@desc Returns quotes' internal identifiers.
@optional {updatedSince: int(int64) # only quotes modified since this timestamp}

@endpoint GET /quotes/{quoteId}/customFields
@desc Returns custom fields of a given quote.
@required {quoteId: str # quote's internal identifier}

@endpoint PUT /quotes/{quoteId}/customFields
@desc Updates custom fields of a given quote.
@required {quoteId: str # quote's internal identifier}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@example_request "/home-api/assets/examples/v1/quotes/updateCustomFields.json#requestBody"

@endpoint GET /quotes/{quoteId}/dates
@desc Returns dates of a given quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /quotes/{quoteId}/finance
@desc Returns finance of a given quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /quotes/{quoteId}/instructions
@desc Returns instructions of a given quote.
@required {quoteId: str # quote's internal identifier}

@endpoint PUT /quotes/{quoteId}/instructions
@desc Updates instructions of a given quote.
@required {quoteId: str # quote's internal identifier}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@example_request "/home-api/assets/examples/v1/quotes/updateInstructions.json#requestBody"

@endpoint POST /quotes/{quoteId}/confirmation/send
@desc Sends a quote for customer confirmation.
@required {quoteId: str # quote's internal identifier}
@returns(204) Success

@endpoint POST /quotes/{quoteId}/start
@desc Starts a quote.
@required {quoteId: str # quote's internal identifier}
@returns(204) Success

@endgroup

@group tasks
@endpoint POST /tasks/{taskId}/files/input
@desc Adds files to a given task.
@required {taskId: str # task's internal identifier}
@optional {name: str, url: str, content: str, token: str, category: str(WORKFILE/TM/DICTIONARY/REF/LOG_FILE) # file category}
@returns(204) Success
@example_request "/home-api/assets/examples/v1/tasks/addFile.json#requestBody"

@endpoint DELETE /tasks/{taskId}
@desc Removes a task.
@required {taskId: str # task's internal identifier}
@optional {removeFilesFromDisc: bool # remove files from disc, removeExternalProjects: bool # remove external projects (ie. from CAT Tool), forceJobsRemoval: bool # force jobs removal (ie. started or ready)}
@returns(204) Success

@endpoint GET /tasks/{taskId}/contacts
@desc Returns contacts of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint PUT /tasks/{taskId}/contacts
@desc Updates contacts of a given task.
@required {taskId: str # task's internal identifier}
@optional {primaryId: int(int64), sendBackToId: int(int64), additionalIds: [int(int64)]}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateContacts.json#requestBody"

@endpoint GET /tasks/{taskId}/customFields
@desc Returns custom fields of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint PUT /tasks/{taskId}/customFields
@desc Updates custom fields of a given task.
@required {taskId: str # task's internal identifier}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateCustomFields.json#requestBody"

@endpoint GET /tasks/{taskId}/dates
@desc Returns dates of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint PUT /tasks/{taskId}/dates
@desc Updates dates of a given task.
@required {taskId: str # task's internal identifier}
@optional {startDate: map{value: int(int64)}, deadline: map{value: int(int64)}, actualStartDate: map{value: int(int64)}, actualDeliveryDate: map{value: int(int64)}}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateDates.json#requestBody"

@endpoint GET /tasks/{taskId}/instructions
@desc Returns instructions of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint PUT /tasks/{taskId}/instructions
@desc Updates instructions of a given task.
@required {taskId: str # task's internal identifier}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateInstructions.json#requestBody"

@endpoint GET /tasks/{taskId}/progress
@desc Returns progress of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint GET /tasks/{taskId}/files
@desc Returns lists of files of a given task.
@required {taskId: str # task's internal identifier}
@returns(200) Success

@endpoint POST /tasks/{taskId}/start
@desc Starts a task.
@required {taskId: str # task's internal identifier}
@returns(204) Success

@endpoint PUT /tasks/{taskId}/clientTaskPONumber
@desc Updates Client Task PO Number of a given task.
@required {taskId: str # task's internal identifier}
@optional {value: str}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateClientTaskPONumber.json#requestBody"

@endpoint PUT /tasks/{taskId}/name
@desc Updates name of a given task.
@required {taskId: str # task's internal identifier}
@optional {value: str}
@returns(200) Success
@example_request "/home-api/assets/examples/v1/tasks/updateName.json#requestBody"

@endgroup

@group dictionaries
@endpoint POST /v2/dictionaries/language
@optional {id: int(int64) # internal identifier, name: str # localised name (formatted in the current user's locale), active: bool # should this value be available on the XTRF selection lists, preferred: bool # should this value be available on the top of XTRF selection lists, in the Preferred section, symbol: str # specific symbol or abbreviation, iso6391: str # ISO 639-1 code, iso6392: str # ISO 639-2 code, default: bool # should this value be set by default in XTRF selection lists}

@endpoint PATCH /v2/dictionaries/language/{languageId}
@required {languageId: int(int64)}
@optional {active: bool}

@endpoint POST /v2/dictionaries/specialization
@optional {id: int(int64) # internal identifier, name: str # localised name (formatted in the current user's locale), active: bool # should this value be available on the XTRF selection lists, preferred: bool # should this value be available on the top of XTRF selection lists, in the Preferred section, default: bool # should this value be set by default in XTRF selection lists}

@endpoint PATCH /v2/dictionaries/specialization/{specializationId}
@required {specializationId: int(int64)}
@optional {active: bool}

@endgroup

@group jobs
@endpoint POST /v2/jobs/{jobId}/files/addExternalLink
@required {jobId: str # job's internal identifier}
@optional {category: str, languageIds: [int(int64)], languageCombinationIds: [map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}], url: str, filename: str, externalInfo: map}

@endpoint POST /v2/jobs/{jobId}/files/delivered/addLink
@desc Adds file link to the project as a link delivered in the job.
@required {jobId: str # job's internal identifier}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}
@example_request "/home-api/assets/examples/v2/jobs/addFileLinksToJob.json#requestBody"

@endpoint PUT /v2/jobs/{jobId}/files/delivered/add
@desc Adds files to the project as delivered in the job.
@required {jobId: str # job's internal identifier}
@optional {files: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], fileId: str}], duplicateFileAction: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/addFiles.json#requestBody"

@endpoint PUT /v2/jobs/{jobId}/vendor
@desc Assigns vendor to a job in a project.
@required {jobId: str # job's internal identifier}
@optional {allowLSPAssignment: bool, vendorPriceProfileId: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/assignVendor.json#requestBody"

@endpoint PUT /v2/jobs/{jobId}/dates
@desc Updates dates of a given job.
@required {jobId: str # job's internal identifier}
@optional {startDate: int(int64), deadline: int(int64), actualStartDate: int(int64), actualEndDate: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/changeDates.json#requestBody"

@endpoint PUT /v2/jobs/{jobId}/status
@desc Changes job status if possible (400 Bad Request is returned otherwise).
@required {jobId: str # job's internal identifier}
@optional {externalId: str, bundleFrom: int(int64), status: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/changeStatus.json#requestBody"

@endpoint GET /v2/jobs/{jobId}
@desc Returns details for a job.
@required {jobId: str # job's internal identifier}

@endpoint DELETE /v2/jobs/{jobId}
@desc Deletes a job.
@required {jobId: str # job's internal identifier}
@returns(204) Success

@endpoint GET /v2/jobs/for-external-id
@optional {externalProjectId: str # job's externalProjectId, externalId: str # job's external identifier, bundleId: int(int64) # job's external bundle id, bundleFrom: int(int64) # job's external bundle from, bundleTo: int(int64) # job's external bundle to}

@endpoint GET /v2/jobs/{jobId}/files/delivered
@desc Returns list of files delivered in the job.
@required {jobId: str # job's internal identifier}

@endpoint GET /v2/jobs/{jobId}/files/sharedReferenceFiles
@desc Returns list of files shared with the job as Reference Files.
@required {jobId: str # job's internal identifier}

@endpoint GET /v2/jobs/{jobId}/files/sharedWorkFiles
@desc Returns list of files shared with the job as Work Files.
@required {jobId: str # job's internal identifier}

@endpoint POST /v2/jobs/merge
@desc Merges given list of jobs into one job.
@optional {jobIds: [str]}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/merge.json#requestBody"

@endpoint PUT /v2/jobs/{jobId}/files/sharedReferenceFiles/share
@desc Shares selected files as Reference Files with a job in a project.
@required {jobId: str # job's internal identifier}

@endpoint PUT /v2/jobs/{jobId}/files/sharedWorkFiles/share
@desc Shares selected files as Work Files with a job in a project.
@required {jobId: str # job's internal identifier}

@endpoint PUT /v2/jobs/{jobId}/files/stopSharing
@desc Stops sharing selected files with a job in a project.
@required {jobId: str # job's internal identifier}

@endpoint PUT /v2/jobs/{jobId}/instructions
@desc Updates instructions for a job.
@required {jobId: str # job's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/jobs/updateInstructionsForJob.json#requestBody"

@endpoint POST /v2/jobs/{jobId}/files/delivered/upload
@desc Uploads file to the project as a file delivered in the job.
@required {jobId: str # job's internal identifier}

@endpoint POST /v2/jobs/{jobId}/files/delivered/uploadFileByVendor
@desc Uploads file to the project as a file delivered in the job, added by vendor.
@required {jobId: str # job's internal identifier}
@optional {externalJobId: str # job's external identifier}

@endgroup

@group projects
@endpoint POST /v2/projects/{projectId}/files/addExternalLinks
@required {projectId: str # project's internal identifier}
@optional {externalFiles: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map}]}

@endpoint POST /v2/projects/{projectId}/externalInfo
@required {projectId: str}

@endpoint POST /v2/projects/{projectId}/files/addLink
@desc Adds file links to the project as added by PM.
@required {projectId: str # project's internal identifier}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}
@example_request "/home-api/assets/examples/v2/projects/addFileLinks.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/files/add
@desc Adds files to the project as added by PM.
@required {projectId: str # project's internal identifier}
@optional {files: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], fileId: str}], duplicateFileAction: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/addFiles.json#requestBody"

@endpoint POST /v2/projects/{projectId}/addJob
@required {projectId: str}

@endpoint PUT /v2/projects/{projectId}/files/addTargetFile
@desc Adds target file to the project as added by PM.
@required {projectId: str # project's internal identifier}
@optional {externalProjectId: str, externalJobId: str, fileId: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/addTargetFile.json#requestBody"

@endpoint POST /v2/projects/files/archive
@desc Prepares a ZIP archive that contains the specified files.
@optional {files: [str]}
@example_request "/home-api/assets/examples/v2/projects/archive.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/status
@desc Changes project status if possible (400 Bad Request is returned otherwise).
@required {projectId: str # project's internal identifier}
@optional {status: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/changeStatus.json#requestBody"

@endpoint POST /v2/projects
@desc Creates a new Smart Project.
@optional {name: str, clientId: int(int64), serviceId: int(int64)}
@returns(201) Success

@endpoint POST /v2/projects/{projectId}/createCatToolProject
@desc Creates Cat Tool Project corresponding to XTRF project.
@required {projectId: str # project's internal identifier}
@optional {templateSelectionType: str(Same_As_Project/Do_Not_Use_Template/Template_By_Id) # Template selection type. If none is provided default value: 'Same_As_Project' will be used., templateId: str # CAT Tool Template Id. Parameter can only be used if 'Template_By_Id' Template Selection Type is provided.}

@endpoint POST /v2/projects/{projectId}/finance/payables
@desc Adds a payable to a project.
@required {projectId: str # project's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map, catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v2/projects/createPayable.json#requestBody"

@endpoint POST /v2/projects/{projectId}/finance/receivables
@desc Adds a receivable to a project.
@required {projectId: str # project's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64), catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v2/projects/createReceivable.json#requestBody"

@endpoint DELETE /v2/projects/{projectId}/files/{fileId}
@desc Deletes a file.
@required {projectId: str # project's internal identifier, fileId: str # file's internal identifier}
@returns(204) Success

@endpoint PUT /v2/projects/{projectId}/finance/payables/{payableId}
@desc Updates a simple payable.
@required {projectId: str # project's internal identifier, payableId: int(int64) # payable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map}
@example_request "/home-api/assets/examples/v2/projects/updatePayable.json#requestBody"

@endpoint DELETE /v2/projects/{projectId}/finance/payables/{payableId}
@desc Deletes a payable.
@required {projectId: str # project's internal identifier, payableId: int(int64) # payable's internal identifier}
@returns(204) Success

@endpoint PUT /v2/projects/{projectId}/finance/receivables/{receivableId}
@desc Updates a simple receivable.
@required {projectId: str # project's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64)}
@example_request "/home-api/assets/examples/v2/projects/updateReceivable.json#requestBody"

@endpoint DELETE /v2/projects/{projectId}/finance/receivables/{receivableId}
@desc Deletes a receivable.
@required {projectId: str # project's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@returns(204) Success

@endpoint GET /v2/projects/for-external-id/{externalProjectId}
@desc Returns project details.
@required {externalProjectId: str # project's external identifier}

@endpoint GET /v2/projects/{projectId}
@desc Returns project details.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/{projectId}/catToolProject
@desc Returns if cat tool project is created or queued.
@required {projectId: str}

@endpoint GET /v2/projects/catToolProjectTemplates
@desc Returns CAT Tool project templates available for selection in XTRF.
@optional {catToolType: str(MemoQ/XTM) # Type of the CAT Tool, projectId: str # Project's internal identifier, catToolId: int(int64) # CAT Tool instance’s internal identifier}

@endpoint GET /v2/projects/{projectId}/clientContacts
@desc Returns Client Contacts information for a project.
@required {projectId: str # project's internal identifier}

@endpoint PUT /v2/projects/{projectId}/clientContacts
@desc Updates Client Contacts for a project.
@required {projectId: str # project's internal identifier}
@optional {primaryId: int(int64), additionalIds: [int(int64)]}
@example_request "/home-api/assets/examples/v2/projects/updateClientContacts.json#requestBody"

@endpoint GET /v2/projects/{projectId}/customFields
@desc Returns a list of custom field keys and values for a project.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/{projectId}/files/deliverable
@desc Returns list of files in a project, that are ready to be delivered to client.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/files/{fileId}
@desc Returns details of a file.
@required {fileId: str # file's internal identifier}

@endpoint GET /v2/projects/files/{fileId}/download/{fileName}
@desc Downloads a file content.
@required {fileId: str # file's internal identifier, fileName: str # file's name}

@endpoint GET /v2/projects/{projectId}/files
@desc Returns list of files in a project.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/{projectId}/finance
@desc Returns finance information for a project.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/{projectId}/jobs
@desc Returns list of jobs in a project.
@required {projectId: str # project's internal identifier}

@endpoint GET /v2/projects/{projectId}/process
@desc Returns process id.
@required {projectId: str}

@endpoint PUT /v2/projects/{projectId}/catToolProjectTemplateDetails
@desc Updates template details for a project.
@required {projectId: str # project's internal identifier}
@optional {catToolProjectTemplateId: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateTemplateDetails.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/clientDeadline
@desc Updates Client Deadline for a project.
@required {projectId: str # project's internal identifier}
@optional {value: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateClientDeadline.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/clientNotes
@desc Updates Client Notes for a project.
@required {projectId: str # project's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateClientNotes.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/clientReferenceNumber
@desc Updates Client Reference Number for a project.
@required {projectId: str # project's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateClientReferenceNumber.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/customFields/{key}
@desc Updates a custom field with a specified key in a project
@required {projectId: str # project's internal identifier, key: str # custom field's key}
@optional {value: map}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateCustomField.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/internalNotes
@desc Updates Internal Notes for a project.
@required {projectId: str # project's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateInternalNotes.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/orderDate
@desc Updates Order Date for a project.
@required {projectId: str # project's internal identifier}
@optional {value: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateOrderedOn.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/processType
@required {projectId: str # project's internal identifier}
@optional {value: str, externalSystemId: int(int64)}

@endpoint PUT /v2/projects/{projectId}/sourceLanguage
@desc Updates source language for a project.
@required {projectId: str # project's internal identifier}
@optional {sourceLanguageId: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateSourceLanguage.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/specialization
@desc Updates specialization for a project.
@required {projectId: str # project's internal identifier}
@optional {specializationId: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateSpecialization.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/targetLanguages
@desc Updates target languages for a project.
@required {projectId: str # project's internal identifier}
@optional {targetLanguageIds: [int(int64)]}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateTargetLanguages.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/vendorInstructions
@desc Updates instructions for all vendors performing the jobs in a project.
@required {projectId: str # project's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateSpecialization.json#requestBody"

@endpoint PUT /v2/projects/{projectId}/volume
@desc Updates volume for a project.
@required {projectId: str # project's internal identifier}
@optional {value: num}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateVolume.json#requestBody"

@endpoint POST /v2/projects/{projectId}/files/upload
@desc Uploads file to the project as a file uploaded by PM.
@required {projectId: str # project's internal identifier}

@endgroup

@group quotes
@endpoint POST /v2/quotes/{quoteId}/files/addExternalLinks
@required {quoteId: str # quote's internal identifier}
@optional {externalFiles: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map}]}

@endpoint POST /v2/quotes/{quoteId}/externalInfo
@required {quoteId: str}

@endpoint POST /v2/quotes/{quoteId}/files/addLink
@desc Adds file links to the quote as added by PM.
@required {quoteId: str # quote's internal identifier}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}
@example_request "/home-api/assets/examples/v2/quotes/addFileLinks.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/files/add
@desc Adds files to the quote as added by PM.
@required {quoteId: str # quote's internal identifier}
@optional {value: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/addFiles.json#requestBody"

@endpoint POST /v2/quotes/{quoteId}/addJob
@required {quoteId: str}

@endpoint PUT /v2/quotes/{quoteId}/files/addTargetFile
@desc Adds target file to the quote as added by PM.
@required {quoteId: str # quote's internal identifier}
@optional {externalProjectId: str, externalJobId: str, fileId: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/addTargetFile.json#requestBody"

@endpoint POST /v2/quotes/files/archive
@desc Prepares a ZIP archive that contains the specified files.

@endpoint PUT /v2/quotes/{quoteId}/status
@desc Changes quote status if possible (400 Bad Request is returned otherwise).
@required {quoteId: str # quote's internal identifier}
@optional {status: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/changeStatus.json#requestBody"

@endpoint POST /v2/quotes
@desc Creates a new Smart Quote.
@optional {name: str, clientId: int(int64), serviceId: int(int64), opportunityOfferId: int(int64)}
@returns(201) Success

@endpoint POST /v2/quotes/{quoteId}/finance/payables
@desc Adds a payable to a quote.
@required {quoteId: str # quote's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map, catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v2/quotes/createPayable.json#requestBody"

@endpoint POST /v2/quotes/{quoteId}/finance/receivables
@desc Adds a receivable to a quote.
@required {quoteId: str # quote's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64), catLogFile: map{name: str, url: str, content: str, token: str}}
@example_request "/home-api/assets/examples/v2/quotes/createReceivable.json#requestBody"

@endpoint DELETE /v2/quotes/{quoteId}/files/{fileId}
@desc Deletes a file.
@required {quoteId: str # quote's internal identifier, fileId: str # file's internal identifier}
@returns(204) Success

@endpoint PUT /v2/quotes/{quoteId}/finance/payables/{payableId}
@desc Updates a simple payable.
@required {quoteId: str # quote's internal identifier, payableId: int(int64) # payable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, jobId: map}
@example_request "/home-api/assets/examples/v2/quotes/updatePayable.json#requestBody"

@endpoint DELETE /v2/quotes/{quoteId}/finance/payables/{payableId}
@desc Deletes a payable.
@required {quoteId: str # quote's internal identifier, payableId: int(int64) # payable's internal identifier}
@returns(204) Success

@endpoint PUT /v2/quotes/{quoteId}/finance/receivables/{receivableId}
@desc Updates a simple receivable.
@required {quoteId: str # quote's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@optional {id: int(int64), jobTypeId: int(int64), languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, languageCombinationIdNumber: str, rateOrigin: str(PRICE_PROFILE/PRICE_LIST/FILLED_MANUALLY/AUTOCALCULATED), currencyId: int(int64), total: num, invoiceId: str, type: str(SIMPLE/CAT), calculationUnitId: int(int64), ignoreMinimumCharge: bool, minimumCharge: num, description: str, rate: num, quantity: num, taskId: int(int64)}
@example_request "/home-api/assets/examples/v2/quotes/updateReceivable.json#requestBody"

@endpoint DELETE /v2/quotes/{quoteId}/finance/receivables/{receivableId}
@desc Deletes a receivable.
@required {quoteId: str # quote's internal identifier, receivableId: int(int64) # receivable's internal identifier}
@returns(204) Success

@endpoint GET /v2/quotes/for-external-id/{externalProjectId}
@desc Returns quote details.
@required {externalProjectId: str # project's external identifier}

@endpoint GET /v2/quotes/{quoteId}
@desc Returns quote details.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/{quoteId}/clientContacts
@desc Returns Client Contacts information for a quote.
@required {quoteId: str # quote's internal identifier}

@endpoint PUT /v2/quotes/{quoteId}/clientContacts
@desc Updates Client Contacts for a quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/{quoteId}/customFields
@desc Returns a list of custom field keys and values for a project.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/files/{fileId}
@desc Returns details of a file.
@required {fileId: str # file's internal identifier}

@endpoint GET /v2/quotes/files/{fileId}/download/{fileName}
@desc Downloads a file content.
@required {fileId: str # file's internal identifier, fileName: str # file's name}

@endpoint GET /v2/quotes/{quoteId}/files
@desc Returns list of files in a quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/{quoteId}/finance
@desc Returns finance information for a quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/{quoteId}/jobs
@desc Returns list of jobs in a quote.
@required {quoteId: str # quote's internal identifier}

@endpoint GET /v2/quotes/{quoteId}/process
@desc Returns process id.
@required {quoteId: str}

@endpoint PUT /v2/quotes/{quoteId}/businessDays
@desc Updates Business Days for a quote.
@required {quoteId: str # quote's internal identifier}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateBusinessDays.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/catToolProjectTemplateDetails
@desc Updates template details for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {catToolProjectTemplateId: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/projects/updateTemplateDetails.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/clientNotes
@desc Updates Client Notes for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateClientNotes.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/clientReferenceNumber
@desc Updates Client Reference Number for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateClientReferenceNumber.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/customFields/{key}
@desc Updates a custom field with a specified key in a quote.
@required {quoteId: str # quote's internal identifier, key: str # custom field's key}
@optional {value: map}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateCustomField.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/expectedDeliveryDate
@desc Updates Expected Delivery Date for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateExpectedDeliveryDate.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/internalNotes
@desc Updates Internal Notes for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateInternalNotes.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/processType
@required {quoteId: str # quote's internal identifier}
@optional {value: str, externalSystemId: int(int64)}

@endpoint PUT /v2/quotes/{quoteId}/quoteExpiry
@desc Updates Quote Expiry Date for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateQuoteExpiry.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/sourceLanguage
@desc Updates source language for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {sourceLanguageId: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateSourceLanguage.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/specialization
@desc Updates specialization for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {specializationId: int(int64)}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateSpecialization.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/targetLanguages
@desc Updates target languages for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {targetLanguageIds: [int(int64)]}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateTargetLanguages.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/vendorInstructions
@desc Updates instructions for all vendors performing the jobs in a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: str}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateInstructionsForAllJobs.json#requestBody"

@endpoint PUT /v2/quotes/{quoteId}/volume
@desc Updates volume for a quote.
@required {quoteId: str # quote's internal identifier}
@optional {value: num}
@returns(204) Success
@example_request "/home-api/assets/examples/v2/quotes/updateVolume.json#requestBody"

@endpoint POST /v2/quotes/{quoteId}/files/upload
@desc Uploads file to the quote as a file uploaded by PM.
@required {quoteId: str # quote's internal identifier}

@endgroup

@end
