# List actuals Retrieve actual spending data for a project Endpoint: GET /projects/{projectId}/actuals Version: 1.0.0 Security: ApiKeyAuth ## Path parameters: - `projectId` (string, required) Project identifier (alias or ID) Example: "nike-spring-2024" ## Query parameters: - `accountId` (any) Filter by account ID(s) or codes Example: ["2150"] - `startDate` (string) Return results on or after this date (ISO 8601) Example: "2024-01-01" - `endDate` (string) Return results on or before this date (ISO 8601) Example: "2024-01-31" - `hasAttachments` (boolean) Filter by whether attachments are present Example: true - `hasAssignedAccount` (boolean) Filter by whether an account is assigned Example: true - `hasLinkedTransaction` (boolean) Filter by presence of linked transactions - `sourceIds` (array) Filter by source IDs Example: ["txn-123"] - `expands` (array) Include related data in the response Enum: "contact", "subactual", "account", "subactual.account" - `idMode` (string) ID interpretation mode. Controls how path and query parameter IDs (like lineId, accountId, phaseId) are interpreted - 'user' for human-readable IDs (account codes, phase names), 'system' for database IDs (UUIDs/nanoids). Also affects the format of IDs in responses. Enum: "user", "system" ## Response 200 fields (application/json): - `actuals` (array) - `actuals.id` (string, required) Actual entry identifier Example: "actual-001" - `actuals.description` (string,null) Actual entry description Example: "Camera rental for shoot days" - `actuals.amount` (number,null) Actual amount Example: 5250 - `actuals.date` (string,null) Actual entry date Example: "2024-03-15T12:00:00Z" - `actuals.accountId` (any) Associated account ID(s) - `actuals.expanded` (boolean, required) Whether this actual has sub-actuals - `actuals.type` (string) Actual entry type Example: "invoice" - `actuals.attachments` (array) Attached files - `actuals.attachments.id` (string, required) File identifier (DigitalOcean Spaces object key) Example: "files/2024/03/budget-report.pdf" - `actuals.attachments.name` (string, required) Original filename Example: "call-sheet-day-3.pdf" - `actuals.attachments.type` (string, required) MIME type Example: "application/pdf" - `actuals.attachments.size` (integer, required) File size in bytes Example: 1048576 - `actuals.ref` (string,null) Reference identifier Example: "INV-2024-0315" - `actuals.payId` (string,null) Payment identifier Example: "pay-xyz-789" - `actuals.status` (string) Actual entry status Example: "completed" - `actuals.notes` (string,null) Additional notes Example: "Q1 advertising budget" - `actuals.tags` (array) Associated tags - `actuals.purchaseOrderId` (string,null) Associated purchase order ID Example: "po-2024-001" - `actuals.transactionId` (string,null) Associated transaction ID Example: "txn-abc-123" - `actuals.contact` (object) - `actuals.contact.id` (string, required) Contact identifier Example: "contact-studio-001" - `actuals.contact.contactTitle` (string,null) Contact display title Example: "Sunset Studios - Production Company" - `actuals.contact.name` (string,null) Contact name Example: "Alex Rivera" - `actuals.contact.email` (string,null) Contact email address Example: "alex.rivera@sunsetstudios.com" - `actuals.contact.company` (string,null) Contact company Example: "Sunset Studios Inc." - `actuals.contact.type` (string,null) Contact type (Person, Company, etc.) Example: "Person" - `actuals.contact.jobTitle` (string,null) Contact job title Example: "Director of Photography" - `actuals.contact.rate` (number,null) Contact hourly rate Example: 150 - `actuals.contact.secureInfo` (object) - `actuals.contact.secureInfo.address` (string,null) Contact address Example: "123 Sunset Blvd, Los Angeles, CA 90028" - `actuals.contact.secureInfo.phone` (string,null) Contact phone number Example: "310-555-1234" - `actuals.contact.secureInfo.taxIdLast4` (string,null) Last 4 digits of tax ID Example: "4567" - `actuals.contact.origin` (object) - `actuals.contact.origin.origin` (string,null) How the contact was created Enum: "onboarding", "manual" - `actuals.contact.origin.createdAt` (string,null) Contact creation timestamp Example: "2024-02-15T08:00:00Z" - `actuals.contact.origin.createdByUser` (object) - `actuals.contact.origin.createdByUser.id` (string, required) User identifier Example: "user-001" - `actuals.contact.origin.createdByUser.name` (string, required) User name Example: "Sarah Chen" - `actuals.contact.origin.createdByUser.email` (string, required) User email address Example: "sarah.chen@sunsetstudios.com" - `actuals.contact.startwork` (array) Startwork agreements - `actuals.contact.startwork.id` (string, required) Startwork agreement identifier Example: "startwork-001" - `actuals.contact.startwork.title` (string, required) Agreement title Example: "Independent Contractor Agreement" - `actuals.contact.startwork.signedOn` (string, required) Signature timestamp Example: "2024-03-01T10:00:00Z" - `actuals.contact.linkedUser` (object) - `actuals.contact.bankInfo` (array) Banking information - `actuals.contact.bankInfo.id` (string, required) Bank account identifier Example: "bank-acc-001" - `actuals.contact.bankInfo.bankName` (string, required) Bank name Example: "Chase Bank" - `actuals.contact.bankInfo.accountType` (string, required) Account type (checking, savings, etc.) Example: "checking" - `actuals.contact.bankInfo.accountLast4` (string, required) Last 4 digits of account number Example: "4567" - `actuals.contact.taxDocuments` (array) Tax documents - `actuals.contact.attachments` (array) File attachments - `actuals.contact.projects` (object) Associated projects - `actuals.subactuals` (array) Sub-actual entries - `actuals.subactuals.id` (string, required) Sub-actual identifier Example: "subactual-001" - `actuals.subactuals.description` (string,null) Sub-actual description Example: "Lighting equipment rental" - `actuals.subactuals.amount` (number, required) Sub-actual amount Example: 2500 - `actuals.subactuals.date` (string,null) Sub-actual date Example: "2024-03-10T09:00:00Z" - `actuals.subactuals.accountId` (string,null) Associated account ID Example: "/marketing/social-media" - `actuals.subactuals.account` (object) - `actuals.subactuals.account.type` (string, required) Type of budget line Enum: "line", "account", "subtotal", "markup", "fringes" - `actuals.subactuals.account.id` (string, required) Budget line identifier (system ID) Example: "line-001" - `actuals.subactuals.account.accountId` (string,null) Account identifier (user-friendly ID like account code) Example: "2150" - `actuals.subactuals.account.description` (string,null) Budget line description Example: "RED Camera Package Rental" - `actuals.subactuals.account.path` (string, required) Hierarchical path in budget tree (e.g., /2000/2150) Example: "/production/equipment/cameras" - `actuals.subactuals.account.totals` (object, required) Calculated totals for each phase Example: {"estimate":25000,"actual":22500,"variance":2500} - `actuals.subactuals.account.tags` (array) Tags for categorization and filtering Example: ["Day-1","A-Camera","Equipment"] - `actuals.subactuals.account.phaseData` (object) Detailed phase-specific data (expandable) - `totalAmount` (number) Example: 450000 ## Response 401 fields (application/json): - `error` (string, required) Error message Example: "Invalid request parameters" - `details` (object) Additional error details Example: {"field":"projectId","reason":"Project not found"} - `code` (string) Error code Example: "VALIDATION_ERROR" ## Response 404 fields (application/json): - `error` (string, required) Error message Example: "Invalid request parameters" - `details` (object) Additional error details Example: {"field":"projectId","reason":"Project not found"} - `code` (string) Error code Example: "VALIDATION_ERROR" ## Response 500 fields (application/json): - `error` (string, required) Error message Example: "Invalid request parameters" - `details` (object) Additional error details Example: {"field":"projectId","reason":"Project not found"} - `code` (string) Error code Example: "VALIDATION_ERROR"