@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
@optional {viewId: int(int64), separator: str, secondarySeparator: str, additionalOrder: str}

@endpoint GET /browser
@optional {viewId: int(int64), page: int(int32)=0, additionalOrder: str, useDeferredColumns: str, maxRows: int(int32)=0}

@endpoint GET /browser/views/for/{className}
@required {className: str}
@optional {placeName: str=default}

@endpoint POST /browser/views/for/{className}
@required {className: str}

@endpoint GET /browser/views/{viewId}
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}
@required {viewId: int(int64)}

@endpoint DELETE /browser/views/{viewId}
@required {viewId: int(int64)}
@returns(204)

@endpoint DELETE /browser/views/{viewId}/columns/{columnName}
@required {viewId: int(int64), columnName: str}

@endpoint GET /browser/views/{viewId}/columns/{columnName}/settings
@required {viewId: int(int64), columnName: str}

@endpoint PUT /browser/views/{viewId}/columns/{columnName}/settings
@required {viewId: int(int64), columnName: str}

@endpoint GET /browser/views/{viewId}/columns
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/columns
@required {viewId: int(int64)}

@endpoint GET /browser/views/details/for/{className}
@required {className: str}
@optional {placeName: str=default}

@endpoint GET /browser/views/{viewId}/filter
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/filter
@required {viewId: int(int64)}

@endpoint GET /browser/views/{viewId}/settings/local
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/settings/local
@required {viewId: int(int64)}
@optional {maxRows: int(int32), maxLinesInRow: int(int32)}

@endpoint GET /browser/views/{viewId}/order
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/order
@required {viewId: int(int64)}

@endpoint GET /browser/views/{viewId}/permissions
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/permissions
@required {viewId: int(int64)}
@optional {sharedGroups: [int(int64)]}

@endpoint GET /browser/views/{viewId}/settings
@required {viewId: int(int64)}

@endpoint PUT /browser/views/{viewId}/settings
@required {viewId: int(int64)}
@optional {name: str, local: map{maxRows: int(int32), maxLinesInRow: int(int32)}}

@endpoint GET /browser/views/details/for/{className}/{viewId}
@required {className: str, viewId: int(int64)}
@optional {placeName: str=default}

@endpoint POST /browser/views/details/for/{className}/{viewId}
@required {className: str, viewId: int(int64)}
@optional {place name (denotes specific place in system with the table): str=default}

@endpoint PUT /browser/views/{viewId}/filter/{filterProperty}
@required {viewId: int(int64), filterProperty: str}
@optional {name: str, type: str, settings: map, settingsPresent: bool}

@endgroup

@group accounting
@endpoint GET /accounting/customers/invoices
@optional {updatedSince: int(int64)}

@endpoint POST /accounting/customers/invoices

@endpoint GET /accounting/customers/invoices/{invoiceId}/payments
@required {invoiceId: int(int64)}

@endpoint POST /accounting/customers/invoices/{invoiceId}/payments
@required {invoiceId: int(int64)}
@returns(204)

@endpoint GET /accounting/customers/invoices/{invoiceId}
@required {invoiceId: int(int64)}
@optional {embed: str}

@endpoint DELETE /accounting/customers/invoices/{invoiceId}
@required {invoiceId: int(int64)}
@returns(204)

@endpoint POST /accounting/customers/invoices/documents

@endpoint POST /accounting/customers/invoices/xmlDocuments

@endpoint POST /accounting/customers/invoices/{invoiceId}/duplicate
@required {invoiceId: int(int64)}

@endpoint POST /accounting/customers/invoices/{invoiceId}/duplicate/proForma
@required {invoiceId: int(int64)}

@endpoint GET /accounting/customers/invoices/ids
@optional {updatedSince: int(int64)}

@endpoint GET /accounting/customers/invoices/{invoiceId}/dates
@required {invoiceId: int(int64)}

@endpoint GET /accounting/customers/invoices/{invoiceId}/document
@required {invoiceId: int(int64)}

@endpoint GET /accounting/customers/invoices/{invoiceId}/paymentTerms
@required {invoiceId: int(int64)}

@endpoint GET /accounting/customers/invoices/{invoiceId}/xmlDocument
@required {invoiceId: int(int64)}

@endpoint POST /accounting/customers/invoices/{invoiceId}/sendReminder
@required {invoiceId: int(int64)}
@returns(204)

@endpoint POST /accounting/customers/invoices/sendReminders

@endpoint DELETE /accounting/customers/payments/{paymentId}
@required {paymentId: int(int64)}
@returns(204)

@endgroup

@group customers
@endpoint POST /customers/persons

@endpoint GET /customers/persons/{personId}
@required {personId: int(int64)}

@endpoint PUT /customers/persons/{personId}
@required {personId: int(int64)}

@endpoint DELETE /customers/persons/{personId}
@required {personId: int(int64)}
@returns(204)

@endpoint POST /customers/persons/accessToken

@endpoint GET /customers/persons/ids
@optional {updatedSince: int(int64)}

@endpoint GET /customers/persons/{personId}/contact
@required {personId: int(int64)}

@endpoint PUT /customers/persons/{personId}/contact
@required {personId: int(int64)}

@endpoint GET /customers/persons/{personId}/customFields
@required {personId: int(int64)}

@endpoint PUT /customers/persons/{personId}/customFields
@required {personId: int(int64)}

@endpoint DELETE /customers/priceLists/{priceListId}
@required {priceListId: int(int64)}
@returns(204)

@endpoint GET /customers
@optional {updatedSince: int(int64), excludeErased: bool}

@endpoint POST /customers
@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}

@endpoint GET /customers/{customerId}
@required {customerId: int(int64)}
@optional {embed: str}

@endpoint PUT /customers/{customerId}
@required {customerId: int(int64)}
@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}

@endpoint DELETE /customers/{customerId}
@required {customerId: int(int64)}
@returns(204)

@endpoint GET /customers/{customerId}/priceProfiles/active
@required {customerId: int(int64)}

@endpoint GET /customers/{customerId}/address
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/address
@required {customerId: int(int64)}
@optional {sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}

@endpoint GET /customers/ids
@optional {updatedSince: int(int64), nameEquals: str, emailEquals: str}

@endpoint GET /customers/{customerId}/budgetCodes
@required {customerId: int(int64)}

@endpoint GET /customers/byAlias
@optional {externalSystemId: int(int64), customerAlias: str}

@endpoint GET /customers/{customerId}/categories
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/categories
@required {customerId: int(int64)}
@optional {empty: bool}

@endpoint GET /customers/{customerId}/contact
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/contact
@required {customerId: int(int64)}
@optional {phones: [str], sms: str, fax: str, emails: map{primary!: str, cc: [str], additional: [str]}, websites: [str]}

@endpoint GET /customers/{customerId}/correspondenceAddress
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/correspondenceAddress
@required {customerId: int(int64)}
@optional {sameAsBillingAddress: bool, addressLine1: str, addressLine2: str, city: str, postalCode: str, provinceId: int(int64), countryId: int(int64)}

@endpoint GET /customers/{customerId}/customFields/{customFieldKey}
@required {customerId: int(int64), customFieldKey: str}

@endpoint PUT /customers/{customerId}/customFields/{customFieldKey}
@required {customerId: int(int64), customFieldKey: str}
@optional {type: str(TEXT/DATE/DATE_AND_TIME/NUMBER/CHECKBOX/SELECTION/MULTI_SELECTION), name: str, key: str, value: map}

@endpoint GET /customers/{customerId}/customFields
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/customFields
@required {customerId: int(int64)}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}

@endpoint GET /customers/{customerId}/settings/specializations
@required {customerId: int(int64)}

@endpoint GET /customers/{customerId}/industries
@required {customerId: int(int64)}

@endpoint PUT /customers/{customerId}/industries
@required {customerId: int(int64)}
@optional {empty: bool}

@endpoint GET /customers/{customerId}/settings/languages
@required {customerId: int(int64)}

@endpoint GET /customers/{customerId}/offices
@required {customerId: int(int64)}

@endpoint GET /customers/{customerId}/services
@required {customerId: int(int64)}

@endgroup

@group files
@endpoint POST /files

@endgroup

@group license
@endpoint GET /license
@returns(200)

@endpoint POST /license/refresh
@returns(204)

@endgroup

@group macros
@endpoint POST /macros/{macroId}/run
@required {macroId: int(int64)}

@endgroup

@group confidential-groups
@endpoint POST /confidential-groups/sensitiveClients/client
@optional {value: int(int64), text: str}

@endpoint GET /confidential-groups/sensitiveClients

@endpoint PUT /confidential-groups/sensitiveClients

@endpoint GET /confidential-groups/sensitiveClients/isSensitive/{clientId}
@required {clientId: int(int64), clientId: int(int64)}

@endpoint DELETE /confidential-groups/sensitiveClients/client/{sensitiveClientId}
@required {sensitiveClientId: int(int64), sensitiveClientId: int(int64)}

@endpoint POST /confidential-groups/trustedVendors/vendor
@optional {value: int(int64), text: str}

@endpoint GET /confidential-groups/trustedVendors

@endpoint PUT /confidential-groups/trustedVendors

@endpoint DELETE /confidential-groups/trustedVendors/vendor/{trustedVendorId}
@required {trustedVendorId: int(int64), trustedVendorId: int(int64)}

@endgroup

@group projectGroups
@endpoint GET /projectGroups

@endpoint POST /projectGroups
@optional {name: str, customerIds: [int(int64)]}

@endpoint GET /projectGroups/{projectGroupId}
@required {projectGroupId: int(int64)}

@endpoint PUT /projectGroups/{projectGroupId}
@required {projectGroupId: int(int64)}
@optional {currencyId: int(int64), budgetValue: num, name: str, status: str(opened/closed), notes: str, categoriesIds: [int(int64)], customersIds: [int(int64)]}

@endpoint DELETE /projectGroups/{projectGroupId}
@required {projectGroupId: int(int64)}
@returns(204)

@endpoint PUT /projectGroups/{projectGroupId}/linkProjects
@required {projectGroupId: int(int64)}
@optional {projectIds: [int(int64)], smartProjectIds: [str]}

@endpoint PUT /projectGroups/{projectGroupId}/linkQuotes
@required {projectGroupId: int(int64)}
@optional {quoteIds: [int(int64)], smartQuoteIds: [str]}

@endpoint PUT /projectGroups/{projectGroupId}/unlinkProjects
@required {projectGroupId: int(int64)}
@optional {projectIds: [int(int64)], smartProjectIds: [str]}

@endpoint PUT /projectGroups/{projectGroupId}/unlinkQuotes
@required {projectGroupId: int(int64)}
@optional {quoteIds: [int(int64)], smartQuoteIds: [str]}

@endgroup

@group accounting
@endpoint GET /accounting/providers/invoices
@optional {updatedSince: int(int64)}

@endpoint POST /accounting/providers/invoices
@optional {jobsIds: [int(int64)]}
@returns(200)

@endpoint GET /accounting/providers/invoices/{invoiceId}/payments
@required {invoiceId: int(int64)}

@endpoint POST /accounting/providers/invoices/{invoiceId}/payments
@required {invoiceId: int(int64)}
@returns(204)

@endpoint GET /accounting/providers/invoices/{invoiceId}
@required {invoiceId: int(int64)}

@endpoint DELETE /accounting/providers/invoices/{invoiceId}
@required {invoiceId: int(int64)}
@returns(204)

@endpoint GET /accounting/providers/invoices/ids
@optional {updatedSince: int(int64)}

@endpoint GET /accounting/providers/invoices/{invoiceId}/document
@required {invoiceId: int(int64)}

@endpoint POST /accounting/providers/invoices/{invoiceId}/send
@required {invoiceId: int(int64)}
@returns(204)

@endpoint POST /accounting/providers/invoices/{invoiceId}/status
@required {invoiceId: int(int64)}
@optional {status: str(POSTPONED/TO_BE_SENT/SENT/CONFIRMED/BILL_CREATED)}
@returns(204)

@endpoint DELETE /accounting/providers/payments/{paymentId}
@required {paymentId: int(int64)}
@returns(204)

@endgroup

@group providers
@endpoint GET /providers/persons/{personId}
@required {personId: int(int64)}

@endpoint DELETE /providers/persons/{personId}
@required {personId: int(int64)}
@returns(204)

@endpoint GET /providers/persons/ids
@optional {updatedSince: int(int64)}

@endpoint GET /providers/persons/{personId}/contact
@required {personId: int(int64)}

@endpoint GET /providers/persons/{personId}/customFields
@required {personId: int(int64)}

@endpoint POST /providers/persons/{personId}/notification/invitation
@required {personId: int(int64)}

@endpoint DELETE /providers/priceLists/{priceListId}
@required {priceListId: int(int64)}
@returns(204)

@endpoint GET /providers/{providerId}
@required {providerId: int(int64)}
@optional {embed: str}

@endpoint DELETE /providers/{providerId}
@required {providerId: int(int64)}
@returns(204)

@endpoint GET /providers/{providerId}/address
@required {providerId: int(int64)}

@endpoint GET /providers/ids
@optional {updatedSince: int(int64)}

@endpoint GET /providers/{providerId}/competencies
@required {providerId: int(int64)}

@endpoint GET /providers/{providerId}/contact
@required {providerId: int(int64)}

@endpoint GET /providers/{providerId}/correspondenceAddress
@required {providerId: int(int64)}

@endpoint GET /providers/{providerId}/customFields
@required {providerId: int(int64)}

@endpoint POST /providers/{providerId}/notification/invitation
@required {providerId: int(int64)}

@endgroup

@group reports
@endpoint DELETE /reports/{reportId}
@required {reportId: int(int64)}
@returns(204)

@endpoint POST /reports/{reportId}/duplicate
@required {reportId: int(int64)}
@returns(204)

@endpoint POST /reports/export/xml

@endpoint GET /reports/{reportId}/result/csv
@required {reportId: int(int64)}

@endpoint GET /reports/{reportId}/result/printerFriendly
@required {reportId: int(int64)}

@endpoint POST /reports/import/xml

@endpoint PUT /reports/{reportId}/preferred
@required {reportId: int(int64)}
@returns(204)

@endgroup

@group services
@endpoint GET /services/all
@optional {nameEquals: str}

@endpoint GET /services/active
@optional {nameEquals: str}

@endgroup

@group settings
@endpoint GET /settings/customFields
@optional {scope: [str]}
@returns(200)

@endgroup

@group subscription
@endpoint GET /subscription/supports

@endpoint GET /subscription

@endpoint POST /subscription
@returns(201)
@errors {409}

@endpoint DELETE /subscription/{subscriptionId}
@required {subscriptionId: str}
@returns(200)

@endgroup

@group system
@endpoint GET /system/configuration/email
@returns(200)

@endpoint GET /system/configuration/ftp
@returns(200)

@endpoint GET /system/configuration
@returns(200)

@endpoint GET /system/timeZone
@returns(200)

@endgroup

@group users
@endpoint PUT /users/{userId}/password
@required {userId: int(int64)}
@returns(204)

@endpoint GET /users

@endpoint GET /users/{userId}
@required {userId: int(int64)}

@endpoint PUT /users/{userId}
@required {userId: int(int64)}
@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}]}

@endpoint GET /users/{userId}/customFields/{customFieldKey}
@required {userId: int(int64), customFieldKey: str}

@endpoint PUT /users/{userId}/customFields/{customFieldKey}
@required {userId: int(int64), customFieldKey: str}
@optional {type: str(TEXT/DATE/DATE_AND_TIME/NUMBER/CHECKBOX/SELECTION/MULTI_SELECTION), name: str, key: str, value: map}

@endpoint GET /users/{userId}/customFields
@required {userId: int(int64)}

@endpoint PUT /users/{userId}/customFields
@required {userId: int(int64)}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}

@endpoint GET /users/me

@endpoint GET /users/me/timeZone

@endgroup

@group dictionaries
@endpoint GET /dictionaries/active

@endpoint GET /dictionaries/{type}/active
@required {type: str}
@optional {nameEquals: str}

@endpoint GET /dictionaries/all

@endpoint GET /dictionaries/{type}/all
@required {type: str}
@optional {nameEquals: str}

@endpoint GET /dictionaries/{type}/{id}
@required {type: str, id: int(int64)}

@endpoint GET /dictionaries/{type}/all/default
@required {type: str}

@endpoint GET /dictionaries/currency/{isoCode}/exchangeRate
@required {isoCode: str}

@endpoint POST /dictionaries/currency/{isoCode}/exchangeRate
@required {isoCode: str}
@optional {exchangeRate: str, dateFrom: map{value: int(int64)}, originDetails: str, publicationDate: map{value: int(int64)}, lastModification: map{value: int(int64)}}
@returns(204)

@endgroup

@group jobs
@endpoint POST /jobs/{jobId}/files/output
@required {jobId: str}

@endpoint PUT /jobs/{jobId}/vendor
@required {jobId: str}
@optional {vendorPriceProfileId: int(int64), recalculateRates: bool}
@returns(204)

@endpoint PUT /jobs/{jobId}/status
@required {jobId: str}
@optional {externalId: str, bundleFrom: int(int64), status: str}
@returns(204)

@endpoint GET /jobs/{jobId}
@required {jobId: str}

@endpoint GET /jobs/{jobId}/files
@required {jobId: str}
@returns(200)

@endpoint GET /jobs/{jobId}/files/{fileId}
@required {jobId: str, fileId: int(int64)}
@returns(200)

@endpoint PUT /jobs/{jobId}/dates
@required {jobId: str}
@optional {startDate: int(int64), deadline: int(int64), actualStartDate: int(int64), actualEndDate: int(int64)}
@returns(204)

@endpoint PUT /jobs/{jobId}/instructions
@required {jobId: str}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@returns(204)

@endgroup

@group projects
@endpoint POST /projects

@endpoint POST /projects/{projectId}/languageCombinations
@required {projectId: str}
@optional {sourceLanguageId: int(int64), targetLanguageId: int(int64)}

@endpoint POST /projects/{projectId}/finance/payables
@required {projectId: str}
@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}}

@endpoint POST /projects/{projectId}/finance/receivables
@required {projectId: str}
@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}}

@endpoint POST /projects/{projectId}/tasks
@required {projectId: str}
@optional {name: str, clientTaskPONumber: str, languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, dates: map{startDate: map, deadline: map, actualStartDate: map, actualDeliveryDate: map}, people: map{responsiblePersons: map, customerContacts: map}, instructions: map{fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}, specializationId: int(int64), workflowId: int(int64), files: [map{name: str, url: str, content: str, token: str, category: str}]}

@endpoint GET /projects/{projectId}
@required {projectId: str}
@optional {embed: str}

@endpoint DELETE /projects/{projectId}
@required {projectId: str}
@returns(204)

@endpoint PUT /projects/{projectId}/finance/payables/{payableId}
@required {projectId: str, payableId: int(int64)}
@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}

@endpoint DELETE /projects/{projectId}/finance/payables/{payableId}
@required {projectId: str, payableId: int(int64)}
@returns(204)

@endpoint PUT /projects/{projectId}/finance/receivables/{receivableId}
@required {projectId: str, receivableId: int(int64)}
@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)}

@endpoint DELETE /projects/{projectId}/finance/receivables/{receivableId}
@required {projectId: str, receivableId: int(int64)}
@returns(204)

@endpoint GET /projects/ids
@optional {updatedSince: int(int64)}

@endpoint GET /projects/{projectId}/contacts
@required {projectId: str}

@endpoint PUT /projects/{projectId}/contacts
@required {projectId: str}
@optional {primaryId: int(int64), sendBackToId: int(int64), additionalIds: [int(int64)]}

@endpoint GET /projects/{projectId}/customFields
@required {projectId: str}

@endpoint PUT /projects/{projectId}/customFields
@required {projectId: str}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}

@endpoint GET /projects/{projectId}/dates
@required {projectId: str}

@endpoint PUT /projects/{projectId}/dates
@required {projectId: str}
@optional {startDate: map{value: int(int64)}, deadline: map{value: int(int64)}, actualStartDate: map{value: int(int64)}, actualDeliveryDate: map{value: int(int64)}}

@endpoint GET /projects/files/{fileId}/download
@required {fileId: str}

@endpoint GET /projects/{projectId}/finance
@required {projectId: str}

@endpoint GET /projects/{projectId}/instructions
@required {projectId: str}

@endpoint PUT /projects/{projectId}/instructions
@required {projectId: str}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}

@endgroup

@group quotes
@endpoint POST /quotes/{quoteId}/languageCombinations
@required {quoteId: str}
@optional {sourceLanguageId: int(int64), targetLanguageId: int(int64)}

@endpoint POST /quotes/{quoteId}/finance/payables
@required {quoteId: str}
@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}}

@endpoint POST /quotes/{quoteId}/finance/receivables
@required {quoteId: str}
@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}}

@endpoint POST /quotes/{quoteId}/tasks
@required {quoteId: str}
@optional {id: int(int64), idNumber: str, projectId: int(int64), quoteId: int(int64), name: str, clientTaskPONumber: str, languageCombination: map{sourceLanguageId: int(int64), targetLanguageId: int(int64)}, dates: map{startDate: map, deadline: map, actualStartDate: map, actualDeliveryDate: map}, people: map{responsiblePersons: map, customerContacts: map}, 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}, jobs: map{jobCount: int(int32), jobIds: [int(int64)]}}

@endpoint GET /quotes/{quoteId}
@required {quoteId: str}
@optional {embed: str}

@endpoint DELETE /quotes/{quoteId}
@required {quoteId: str}
@returns(204)

@endpoint PUT /quotes/{quoteId}/finance/payables/{payableId}
@required {quoteId: str, payableId: int(int64)}
@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}

@endpoint DELETE /quotes/{quoteId}/finance/payables/{payableId}
@required {quoteId: str, payableId: int(int64)}
@returns(204)

@endpoint PUT /quotes/{quoteId}/finance/receivables/{receivableId}
@required {quoteId: str, receivableId: int(int64)}
@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)}

@endpoint DELETE /quotes/{quoteId}/finance/receivables/{receivableId}
@required {quoteId: str, receivableId: int(int64)}
@returns(204)

@endpoint GET /quotes/ids
@optional {updatedSince: int(int64)}

@endpoint GET /quotes/{quoteId}/customFields
@required {quoteId: str}

@endpoint PUT /quotes/{quoteId}/customFields
@required {quoteId: str}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}

@endpoint GET /quotes/{quoteId}/dates
@required {quoteId: str}

@endpoint GET /quotes/{quoteId}/finance
@required {quoteId: str}

@endpoint GET /quotes/{quoteId}/instructions
@required {quoteId: str}

@endpoint PUT /quotes/{quoteId}/instructions
@required {quoteId: str}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}

@endpoint POST /quotes/{quoteId}/confirmation/send
@required {quoteId: str}
@returns(204)

@endpoint POST /quotes/{quoteId}/start
@required {quoteId: str}
@returns(204)

@endgroup

@group tasks
@endpoint POST /tasks/{taskId}/files/input
@required {taskId: str}
@optional {name: str, url: str, content: str, token: str, category: str(WORKFILE/TM/DICTIONARY/REF/LOG_FILE)}
@returns(204)

@endpoint DELETE /tasks/{taskId}
@required {taskId: str}
@optional {removeFilesFromDisc: bool, removeExternalProjects: bool, forceJobsRemoval: bool}
@returns(204)

@endpoint GET /tasks/{taskId}/contacts
@required {taskId: str}
@returns(200)

@endpoint PUT /tasks/{taskId}/contacts
@required {taskId: str}
@optional {primaryId: int(int64), sendBackToId: int(int64), additionalIds: [int(int64)]}
@returns(200)

@endpoint GET /tasks/{taskId}/customFields
@required {taskId: str}
@returns(200)

@endpoint PUT /tasks/{taskId}/customFields
@required {taskId: str}
@optional {customFields: [map{type: str, name: str, key: str, value: map}], empty: bool}
@returns(200)

@endpoint GET /tasks/{taskId}/dates
@required {taskId: str}
@returns(200)

@endpoint PUT /tasks/{taskId}/dates
@required {taskId: str}
@optional {startDate: map{value: int(int64)}, deadline: map{value: int(int64)}, actualStartDate: map{value: int(int64)}, actualDeliveryDate: map{value: int(int64)}}
@returns(200)

@endpoint GET /tasks/{taskId}/instructions
@required {taskId: str}
@returns(200)

@endpoint PUT /tasks/{taskId}/instructions
@required {taskId: str}
@optional {fromCustomer: str, forProvider: str, internal: str, paymentNoteForCustomer: str, paymentNoteForVendor: str, notes: str}
@returns(200)

@endpoint GET /tasks/{taskId}/progress
@required {taskId: str}
@returns(200)

@endpoint GET /tasks/{taskId}/files
@required {taskId: str}
@returns(200)

@endpoint POST /tasks/{taskId}/start
@required {taskId: str}
@returns(204)

@endpoint PUT /tasks/{taskId}/clientTaskPONumber
@required {taskId: str}
@optional {value: str}
@returns(200)

@endpoint PUT /tasks/{taskId}/name
@required {taskId: str}
@optional {value: str}
@returns(200)

@endgroup

@group dictionaries
@endpoint POST /v2/dictionaries/language
@optional {id: int(int64), name: str, active: bool, preferred: bool, symbol: str, iso6391: str, iso6392: str, default: bool}

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

@endpoint POST /v2/dictionaries/specialization
@optional {id: int(int64), name: str, active: bool, preferred: bool, default: bool}

@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}
@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
@required {jobId: str}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}

@endpoint PUT /v2/jobs/{jobId}/files/delivered/add
@required {jobId: str}
@optional {files: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], fileId: str}], duplicateFileAction: str}
@returns(204)

@endpoint PUT /v2/jobs/{jobId}/vendor
@required {jobId: str}
@optional {allowLSPAssignment: bool, vendorPriceProfileId: int(int64)}
@returns(204)

@endpoint PUT /v2/jobs/{jobId}/dates
@required {jobId: str}
@optional {startDate: int(int64), deadline: int(int64), actualStartDate: int(int64), actualEndDate: int(int64)}
@returns(204)

@endpoint PUT /v2/jobs/{jobId}/status
@required {jobId: str}
@optional {externalId: str, bundleFrom: int(int64), status: str}
@returns(204)

@endpoint GET /v2/jobs/{jobId}
@required {jobId: str}

@endpoint DELETE /v2/jobs/{jobId}
@required {jobId: str}
@returns(204)

@endpoint GET /v2/jobs/for-external-id
@optional {externalProjectId: str, externalId: str, bundleId: int(int64), bundleFrom: int(int64), bundleTo: int(int64)}

@endpoint GET /v2/jobs/{jobId}/files/delivered
@required {jobId: str}

@endpoint GET /v2/jobs/{jobId}/files/sharedReferenceFiles
@required {jobId: str}

@endpoint GET /v2/jobs/{jobId}/files/sharedWorkFiles
@required {jobId: str}

@endpoint POST /v2/jobs/merge
@optional {jobIds: [str]}
@returns(204)

@endpoint PUT /v2/jobs/{jobId}/files/sharedReferenceFiles/share
@required {jobId: str}

@endpoint PUT /v2/jobs/{jobId}/files/sharedWorkFiles/share
@required {jobId: str}

@endpoint PUT /v2/jobs/{jobId}/files/stopSharing
@required {jobId: str}

@endpoint PUT /v2/jobs/{jobId}/instructions
@required {jobId: str}
@optional {value: str}
@returns(204)

@endpoint POST /v2/jobs/{jobId}/files/delivered/upload
@required {jobId: str}

@endpoint POST /v2/jobs/{jobId}/files/delivered/uploadFileByVendor
@required {jobId: str}
@optional {externalJobId: str}

@endgroup

@group projects
@endpoint POST /v2/projects/{projectId}/files/addExternalLinks
@required {projectId: str}
@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
@required {projectId: str}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}

@endpoint PUT /v2/projects/{projectId}/files/add
@required {projectId: str}
@optional {files: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], fileId: str}], duplicateFileAction: str}
@returns(204)

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

@endpoint PUT /v2/projects/{projectId}/files/addTargetFile
@required {projectId: str}
@optional {externalProjectId: str, externalJobId: str, fileId: str}
@returns(204)

@endpoint POST /v2/projects/files/archive
@optional {files: [str]}

@endpoint PUT /v2/projects/{projectId}/status
@required {projectId: str}
@optional {status: str}
@returns(204)

@endpoint POST /v2/projects
@optional {name: str, clientId: int(int64), serviceId: int(int64)}
@returns(201)

@endpoint POST /v2/projects/{projectId}/createCatToolProject
@required {projectId: str}
@optional {templateSelectionType: str(Same_As_Project/Do_Not_Use_Template/Template_By_Id), templateId: str}

@endpoint POST /v2/projects/{projectId}/finance/payables
@required {projectId: str}
@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}}

@endpoint POST /v2/projects/{projectId}/finance/receivables
@required {projectId: str}
@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}}

@endpoint DELETE /v2/projects/{projectId}/files/{fileId}
@required {projectId: str, fileId: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/finance/payables/{payableId}
@required {projectId: str, payableId: int(int64)}
@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}

@endpoint DELETE /v2/projects/{projectId}/finance/payables/{payableId}
@required {projectId: str, payableId: int(int64)}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/finance/receivables/{receivableId}
@required {projectId: str, receivableId: int(int64)}
@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)}

@endpoint DELETE /v2/projects/{projectId}/finance/receivables/{receivableId}
@required {projectId: str, receivableId: int(int64)}
@returns(204)

@endpoint GET /v2/projects/for-external-id/{externalProjectId}
@required {externalProjectId: str}

@endpoint GET /v2/projects/{projectId}
@required {projectId: str}

@endpoint GET /v2/projects/{projectId}/catToolProject
@required {projectId: str}

@endpoint GET /v2/projects/catToolProjectTemplates
@optional {catToolType: str(MemoQ/XTM), projectId: str, catToolId: int(int64)}

@endpoint GET /v2/projects/{projectId}/clientContacts
@required {projectId: str}

@endpoint PUT /v2/projects/{projectId}/clientContacts
@required {projectId: str}
@optional {primaryId: int(int64), additionalIds: [int(int64)]}

@endpoint GET /v2/projects/{projectId}/customFields
@required {projectId: str}

@endpoint GET /v2/projects/{projectId}/files/deliverable
@required {projectId: str}

@endpoint GET /v2/projects/files/{fileId}
@required {fileId: str}

@endpoint GET /v2/projects/files/{fileId}/download/{fileName}
@required {fileId: str, fileName: str}

@endpoint GET /v2/projects/{projectId}/files
@required {projectId: str}

@endpoint GET /v2/projects/{projectId}/finance
@required {projectId: str}

@endpoint GET /v2/projects/{projectId}/jobs
@required {projectId: str}

@endpoint GET /v2/projects/{projectId}/process
@required {projectId: str}

@endpoint PUT /v2/projects/{projectId}/catToolProjectTemplateDetails
@required {projectId: str}
@optional {catToolProjectTemplateId: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/clientDeadline
@required {projectId: str}
@optional {value: int(int64)}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/clientNotes
@required {projectId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/clientReferenceNumber
@required {projectId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/customFields/{key}
@required {projectId: str, key: str}
@optional {value: map}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/internalNotes
@required {projectId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/orderDate
@required {projectId: str}
@optional {value: int(int64)}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/processType
@required {projectId: str}
@optional {value: str, externalSystemId: int(int64)}

@endpoint PUT /v2/projects/{projectId}/sourceLanguage
@required {projectId: str}
@optional {sourceLanguageId: int(int64)}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/specialization
@required {projectId: str}
@optional {specializationId: int(int64)}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/targetLanguages
@required {projectId: str}
@optional {targetLanguageIds: [int(int64)]}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/vendorInstructions
@required {projectId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/projects/{projectId}/volume
@required {projectId: str}
@optional {value: num}
@returns(204)

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

@endgroup

@group quotes
@endpoint POST /v2/quotes/{quoteId}/files/addExternalLinks
@required {quoteId: str}
@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
@required {quoteId: str}
@optional {fileLinks: [map{category: str, languageIds: [int(int64)], languageCombinationIds: [map], url: str, filename: str, externalInfo: map, toBeGenerated: bool}]}

@endpoint PUT /v2/quotes/{quoteId}/files/add
@required {quoteId: str}
@optional {value: int(int64)}
@returns(204)

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

@endpoint PUT /v2/quotes/{quoteId}/files/addTargetFile
@required {quoteId: str}
@optional {externalProjectId: str, externalJobId: str, fileId: str}
@returns(204)

@endpoint POST /v2/quotes/files/archive

@endpoint PUT /v2/quotes/{quoteId}/status
@required {quoteId: str}
@optional {status: str}
@returns(204)

@endpoint POST /v2/quotes
@optional {name: str, clientId: int(int64), serviceId: int(int64), opportunityOfferId: int(int64)}
@returns(201)

@endpoint POST /v2/quotes/{quoteId}/finance/payables
@required {quoteId: str}
@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}}

@endpoint POST /v2/quotes/{quoteId}/finance/receivables
@required {quoteId: str}
@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}}

@endpoint DELETE /v2/quotes/{quoteId}/files/{fileId}
@required {quoteId: str, fileId: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/finance/payables/{payableId}
@required {quoteId: str, payableId: int(int64)}
@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}

@endpoint DELETE /v2/quotes/{quoteId}/finance/payables/{payableId}
@required {quoteId: str, payableId: int(int64)}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/finance/receivables/{receivableId}
@required {quoteId: str, receivableId: int(int64)}
@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)}

@endpoint DELETE /v2/quotes/{quoteId}/finance/receivables/{receivableId}
@required {quoteId: str, receivableId: int(int64)}
@returns(204)

@endpoint GET /v2/quotes/for-external-id/{externalProjectId}
@required {externalProjectId: str}

@endpoint GET /v2/quotes/{quoteId}
@required {quoteId: str}

@endpoint GET /v2/quotes/{quoteId}/clientContacts
@required {quoteId: str}

@endpoint PUT /v2/quotes/{quoteId}/clientContacts
@required {quoteId: str}

@endpoint GET /v2/quotes/{quoteId}/customFields
@required {quoteId: str}

@endpoint GET /v2/quotes/files/{fileId}
@required {fileId: str}

@endpoint GET /v2/quotes/files/{fileId}/download/{fileName}
@required {fileId: str, fileName: str}

@endpoint GET /v2/quotes/{quoteId}/files
@required {quoteId: str}

@endpoint GET /v2/quotes/{quoteId}/finance
@required {quoteId: str}

@endpoint GET /v2/quotes/{quoteId}/jobs
@required {quoteId: str}

@endpoint GET /v2/quotes/{quoteId}/process
@required {quoteId: str}

@endpoint PUT /v2/quotes/{quoteId}/businessDays
@required {quoteId: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/catToolProjectTemplateDetails
@required {quoteId: str}
@optional {catToolProjectTemplateId: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/clientNotes
@required {quoteId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/clientReferenceNumber
@required {quoteId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/customFields/{key}
@required {quoteId: str, key: str}
@optional {value: map}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/expectedDeliveryDate
@required {quoteId: str}
@optional {value: int(int64)}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/internalNotes
@required {quoteId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/processType
@required {quoteId: str}
@optional {value: str, externalSystemId: int(int64)}

@endpoint PUT /v2/quotes/{quoteId}/quoteExpiry
@required {quoteId: str}
@optional {value: int(int64)}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/sourceLanguage
@required {quoteId: str}
@optional {sourceLanguageId: int(int64)}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/specialization
@required {quoteId: str}
@optional {specializationId: int(int64)}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/targetLanguages
@required {quoteId: str}
@optional {targetLanguageIds: [int(int64)]}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/vendorInstructions
@required {quoteId: str}
@optional {value: str}
@returns(204)

@endpoint PUT /v2/quotes/{quoteId}/volume
@required {quoteId: str}
@optional {value: num}
@returns(204)

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

@endgroup

@end
