Expense contract
The expense contract links a fund to a vendor and declares the expense types that vendor provides to the fund. Expenses of those types can only be posted under an active contract.
Before it takes effect, the contract goes through automated reading, QI Tech review and signature.
Contract flow
1. Create the contract
Create the contract, which starts in pending_submission. Provide the name, vendor, signature method and expense types. Monthly recurrences and an expiration date are optional.
2. Upload the contract document
Request an upload URL and upload the contract PDF straight to it.
While the contract is in pending_submission, you can correct its data and replace the document.
3. Submit for review
Send the contract for review (sent_to_analysis). The document is frozen.
4. QI Tech review
- The automated reading checks the document against the declared data.
- The QI Tech team reviews the contract (
in_manual_analysis). - If there is a possible conflict of interest between the vendor and the fund's parties, the contract moves on to compliance (
in_compliance_analysis).
During these steps, you can only follow the contract or cancel it.
5. Signature
Once approved, the contract waits in pending_vendor_approval if the vendor's registration has not been approved yet. Then:
certifiqiorqi_sign: QI Tech creates the signature batch with the manager's and the vendor's signers (pending_signature). The contract becomesactivewhen everyone signs. During this step, the signature method can be switched.external: the uploaded document is already considered signed, and the contract becomesactiveright away.
6. Maintenance
An active or expired contract can receive:
- attachments;
- an amendment, which replaces it;
- a termination request.
Track everything through the contract retrieval.
Consultant
The consultant uses the same calls on consultant-api, with the fund permissions Read, Create and Update Expense Contracts. What changes:
- After the QI Tech review, a consultant's contract waits for the manager's decision in
pending_manager_approval. - A contract posted by the consultant carries the consultant's key in
consultant_key. - Only the manager decides on the consultant's contract and requests the termination.
- The list and summary of contracts across all funds include only the funds in which the consultant has the Read Expense Contracts permission.
- The signers on the fund side are still the manager's.
Contract status
| Status | Description |
|---|---|
pending_submission | Being filled in. The only status in which the data and the document can be changed. |
sent_to_analysis | Submitted for review; document under automated reading. |
in_manual_analysis | Under QI Tech review, with the automated reading result. |
in_compliance_analysis | Under review by QI Tech compliance. |
pending_manager_approval | Posted by a consultant, approved by QI Tech and awaiting the manager's decision. |
pending_vendor_approval | Approved, awaiting approval of the vendor's registration. |
pending_signature | Awaiting signatures. |
active | In effect. Accepts expenses. |
expired | expiration_date has passed. Does not accept new expenses; still accepts amendment, termination and attachments. |
amended | Replaced by an amendment that took effect. |
reproved | Rejected or terminated. The reason is in reproval_reason. |
canceled | Canceled by the manager or the consultant, or signature batch declined or canceled. |
In these pages, an in-progress contract is one in any status from pending_submission to pending_signature: it has not taken effect yet and can be canceled.
status_events also includes the transient status created, recorded at the same instant as pending_submission.
Rejection reasons
reproval_reason | Origin |
|---|---|
invalid_document | QI Tech review: invalid document. |
incorrect_information | QI Tech review: data does not match the document. |
prohibited_clauses | QI Tech review: prohibited clauses. |
abusive_pricing | QI Tech review: abusive pricing. |
compliance_reproval | QI Tech compliance, or the vendor became inactive in the registry. Permanently blocks new contracts between the fund and the vendor. |
manager_reproval | The manager rejected a contract posted by the consultant. |
termination_agreement | QI Tech approved the termination request. |
vendor_expired | The vendor's registration expired while the contract was still in progress. |
Rules
- Expense types. The contract accepts
audit_tax,custody_tax,consulting_fee,lawyer_fee,bookkeeping_fee,distribution_fee,insurance_fee,collection_agent_fee,servicing_fee,rating_agency_fee,certifier_fee,fund_structuring_fee,origination_fee,sale_commission_tax,bankslip_feeandbank_account.administration_tax,management_tax,performance_feeandcredit_rights_registration_feeare contracted during fund structuring.cvm_tax,anbima_tax,cetip_tax,selic_tax,notaryandcourt_feedo not use a contract.
- Vendor. Must belong to the manager, or to a consultant with the Create Expense Contracts permission on the fund. It cannot be
inactiveorexpired. A vendor not yet approved is accepted: after the contract is approved, it waits inpending_vendor_approvaluntil the vendor is approved. - One contract per type and vendor. In the same fund, an expense type with the same vendor can only be in one in-progress,
activeorexpiredcontract. With a different vendor, it can. - Recurrence.
recurrencescreates an automatic monthly expense per expense type, paid to the vendor on the last business day of each month. When sent, it must have exactly one recurrence for each declared type. - Expiration. The contract moves to
expiredon the day afterexpiration_date. - Dates and times.
created_atandevent_datetimecome in ISO 8601 without a time zone (2026-11-09T14:03:22.512345). Dates come asYYYY-MM-DD. - Tracking. There is no contract webhook: track through the retrieval. Actions taken through the API with an integration key appear in
status_eventswithauthor_type: qitech. - Internal error. Failures in services queried during the call (signature, vendor registry, automated reading) come back as
500(QIT000500).
Errors
Authentication, permission and host errors: see API Errors. Contract errors have the ECT prefix and are listed on each call's page.