openapi: 3.0.3 info: title: freee API (Accounting and HR/Payroll) description: >- A representative, hand-authored subset of the public freee REST APIs for the freee Accounting product (会計freee) and the freee HR & Payroll product (人事労務freee). freee is a Japanese cloud accounting, invoicing, and HR / payroll SaaS. Accounting endpoints live under https://api.freee.co.jp/api/1 and HR / payroll endpoints under https://api.freee.co.jp/hr/api/v1. All requests are authenticated with an OAuth 2.0 (authorization code) access token sent as `Authorization: Bearer `. Most reads and writes are scoped to a freee company via the `company_id` parameter. This document is grounded in freee's own OpenAPI schemas (github.com/freee/freee-api-schema) but is a curated subset - it does not reproduce every operation, field, or response of the freee platform. See the official reference for the complete surface. version: '2026-02-01' contact: name: freee Developers Community url: https://developer.freee.co.jp/ license: name: © Since 2013 freee K.K. url: https://app.secure.freee.co.jp/developers/terms servers: - url: https://api.freee.co.jp description: freee production API host (accounting under /api/1, HR under /hr/api/v1) security: - oauth2: - read - write tags: - name: Companies description: freee companies (事業所) the authenticated user can access. - name: Deals description: Accounting deals / transactions (取引) - income and expense records. - name: Account Items description: Accounting account items / chart of accounts (勘定科目). - name: Partners description: Trading partners / counterparties (取引先). - name: Invoices description: Issued invoices and quotations (請求書・見積書). - name: Wallet Transactions description: Wallet transactions / statement lines (明細) and walletables (口座). - name: Journals description: Journals (仕訳帳), manual journals, and trial-balance reports. - name: Taxes description: Tax codes (税区分) available to a company. - name: HR Users description: Authenticated HR user context. - name: Employees description: HR employees (従業員). - name: Payroll description: Employee payroll statements (給与明細) and bonuses. - name: Attendance description: Time clocks (打刻) and work records (勤怠). paths: /api/1/companies: get: operationId: getCompanies tags: [Companies] summary: List companies description: Lists the freee companies (事業所) the authenticated user belongs to. responses: '200': description: A list of companies. content: application/json: schema: type: object properties: companies: type: array items: $ref: '#/components/schemas/Company' '401': $ref: '#/components/responses/Unauthorized' /api/1/companies/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getCompany tags: [Companies] summary: Get a company description: Retrieves details, account items, taxes, and settings for one company. responses: '200': description: The requested company. content: application/json: schema: type: object properties: company: $ref: '#/components/schemas/Company' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/1/deals: get: operationId: getDeals tags: [Deals] summary: List deals description: >- Lists accounting deals / transactions (取引) for a company. A deal is an income (収入) or expense (支出) record with one or more detail lines. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: partner_id in: query schema: { type: integer } - name: account_item_id in: query schema: { type: integer } - name: status in: query description: Settlement status. schema: type: string enum: [unsettled, settled] - name: type in: query schema: type: string enum: [income, expense] - name: start_issue_date in: query schema: { type: string, format: date } - name: end_issue_date in: query schema: { type: string, format: date } - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/Limit' responses: '200': description: A list of deals. content: application/json: schema: type: object properties: deals: type: array items: $ref: '#/components/schemas/Deal' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createDeal tags: [Deals] summary: Create a deal description: Creates a new accounting deal (取引). requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DealCreateParams' responses: '201': description: The created deal. content: application/json: schema: type: object properties: deal: $ref: '#/components/schemas/Deal' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /api/1/deals/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getDeal tags: [Deals] summary: Get a deal parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: The requested deal. content: application/json: schema: type: object properties: deal: $ref: '#/components/schemas/Deal' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateDeal tags: [Deals] summary: Update a deal requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DealCreateParams' responses: '200': description: The updated deal. content: application/json: schema: type: object properties: deal: $ref: '#/components/schemas/Deal' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteDeal tags: [Deals] summary: Delete a deal parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '204': description: The deal was deleted. '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/1/account_items: get: operationId: getAccountItems tags: [Account Items] summary: List account items description: Lists the account items / chart of accounts (勘定科目) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: A list of account items. content: application/json: schema: type: object properties: account_items: type: array items: $ref: '#/components/schemas/AccountItem' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createAccountItem tags: [Account Items] summary: Create an account item requestBody: required: true content: application/json: schema: type: object required: [company_id, name] properties: company_id: { type: integer } name: { type: string } tax_code: { type: integer } account_category_id: { type: integer } responses: '201': description: The created account item. content: application/json: schema: type: object properties: account_item: $ref: '#/components/schemas/AccountItem' '401': $ref: '#/components/responses/Unauthorized' /api/1/account_items/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getAccountItem tags: [Account Items] summary: Get an account item parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: The requested account item. content: application/json: schema: type: object properties: account_item: $ref: '#/components/schemas/AccountItem' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateAccountItem tags: [Account Items] summary: Update an account item requestBody: required: true content: application/json: schema: type: object properties: company_id: { type: integer } name: { type: string } responses: '200': description: The updated account item. content: application/json: schema: type: object properties: account_item: $ref: '#/components/schemas/AccountItem' '401': $ref: '#/components/responses/Unauthorized' delete: operationId: deleteAccountItem tags: [Account Items] summary: Delete an account item parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '204': description: The account item was deleted. '401': $ref: '#/components/responses/Unauthorized' /api/1/partners: get: operationId: getPartners tags: [Partners] summary: List partners description: Lists trading partners / counterparties (取引先) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: keyword in: query schema: { type: string } - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/Limit' responses: '200': description: A list of partners. content: application/json: schema: type: object properties: partners: type: array items: $ref: '#/components/schemas/Partner' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createPartner tags: [Partners] summary: Create a partner requestBody: required: true content: application/json: schema: type: object required: [company_id, name] properties: company_id: { type: integer } name: { type: string } code: { type: string } responses: '201': description: The created partner. content: application/json: schema: type: object properties: partner: $ref: '#/components/schemas/Partner' '401': $ref: '#/components/responses/Unauthorized' /api/1/partners/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getPartner tags: [Partners] summary: Get a partner parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: The requested partner. content: application/json: schema: type: object properties: partner: $ref: '#/components/schemas/Partner' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updatePartner tags: [Partners] summary: Update a partner requestBody: required: true content: application/json: schema: type: object properties: company_id: { type: integer } name: { type: string } responses: '200': description: The updated partner. content: application/json: schema: type: object properties: partner: $ref: '#/components/schemas/Partner' '401': $ref: '#/components/responses/Unauthorized' delete: operationId: deletePartner tags: [Partners] summary: Delete a partner parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '204': description: The partner was deleted. '401': $ref: '#/components/responses/Unauthorized' /api/1/invoices: get: operationId: getInvoices tags: [Invoices] summary: List invoices description: Lists issued invoices (請求書) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/Limit' responses: '200': description: A list of invoices. content: application/json: schema: type: object properties: invoices: type: array items: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' /api/1/invoices/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getInvoice tags: [Invoices] summary: Get an invoice parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: The requested invoice. content: application/json: schema: type: object properties: invoice: $ref: '#/components/schemas/Invoice' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /api/1/quotations: get: operationId: getQuotations tags: [Invoices] summary: List quotations description: Lists issued quotations / estimates (見積書) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: A list of quotations. content: application/json: schema: type: object properties: quotations: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /api/1/wallet_txns: get: operationId: getWalletTxns tags: [Wallet Transactions] summary: List wallet transactions description: Lists wallet transactions / statement lines (明細) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: walletable_type in: query schema: type: string enum: [bank_account, credit_card, wallet] - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/Limit' responses: '200': description: A list of wallet transactions. content: application/json: schema: type: object properties: wallet_txns: type: array items: $ref: '#/components/schemas/WalletTxn' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createWalletTxn tags: [Wallet Transactions] summary: Create a wallet transaction requestBody: required: true content: application/json: schema: type: object required: [company_id, entry_side, amount, date, walletable_type, walletable_id] properties: company_id: { type: integer } entry_side: type: string enum: [income, expense] amount: { type: integer } date: { type: string, format: date } walletable_type: type: string enum: [bank_account, credit_card, wallet] walletable_id: { type: integer } responses: '201': description: The created wallet transaction. content: application/json: schema: type: object properties: wallet_txn: $ref: '#/components/schemas/WalletTxn' '401': $ref: '#/components/responses/Unauthorized' /api/1/wallet_txns/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getWalletTxn tags: [Wallet Transactions] summary: Get a wallet transaction parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: The requested wallet transaction. content: application/json: schema: type: object properties: wallet_txn: $ref: '#/components/schemas/WalletTxn' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteWalletTxn tags: [Wallet Transactions] summary: Delete a wallet transaction parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '204': description: The wallet transaction was deleted. '401': $ref: '#/components/responses/Unauthorized' /api/1/walletables: get: operationId: getWalletables tags: [Wallet Transactions] summary: List walletables description: Lists walletables (口座) - bank accounts, credit cards, and wallets - for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: type in: query schema: type: string enum: [bank_account, credit_card, wallet] responses: '200': description: A list of walletables. content: application/json: schema: type: object properties: walletables: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /api/1/journals: get: operationId: getJournals tags: [Journals] summary: Request a journals export description: >- Starts an asynchronous export of journals (仕訳帳) for a company in CSV, PDF, or freee's yayoi format. Poll the reports status / download endpoints for the generated file. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: download_type in: query schema: type: string enum: [csv, pdf, yayoi, generic_v2] - name: start_date in: query schema: { type: string, format: date } - name: end_date in: query schema: { type: string, format: date } responses: '202': description: The export request was accepted. content: application/json: schema: type: object properties: journals: type: object properties: id: { type: integer } company_id: { type: integer } download_type: { type: string } '401': $ref: '#/components/responses/Unauthorized' /api/1/manual_journals: get: operationId: getManualJournals tags: [Journals] summary: List manual journals description: Lists manual journal entries (振替伝票) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' responses: '200': description: A list of manual journals. content: application/json: schema: type: object properties: manual_journals: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' post: operationId: createManualJournal tags: [Journals] summary: Create a manual journal requestBody: required: true content: application/json: schema: type: object required: [company_id, issue_date, details] properties: company_id: { type: integer } issue_date: { type: string, format: date } details: type: array items: type: object additionalProperties: true responses: '201': description: The created manual journal. content: application/json: schema: type: object properties: manual_journal: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /api/1/reports/trial_pl: get: operationId: getTrialPl tags: [Journals] summary: Get profit and loss trial balance description: Returns the profit-and-loss trial balance (試算表・損益計算書) for a company. parameters: - $ref: '#/components/parameters/CompanyIdQueryRequired' - name: fiscal_year in: query schema: { type: integer } responses: '200': description: The P&L trial balance. content: application/json: schema: type: object properties: trial_pl: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /api/1/taxes/codes: get: operationId: getTaxCodes tags: [Taxes] summary: List tax codes description: Lists the tax codes / tax classifications (税区分) available in freee. responses: '200': description: A list of tax codes. content: application/json: schema: type: object properties: taxes: type: array items: type: object properties: code: { type: integer } name: { type: string } '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/users/me: get: operationId: getHrMe tags: [HR Users] summary: Get current HR user description: >- Returns the authenticated user and the HR companies (事業所) they can access in freee人事労務. responses: '200': description: The current HR user. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/employees: get: operationId: getEmployees tags: [Employees] summary: List employees description: Lists employees (従業員) for an HR company and month. parameters: - name: company_id in: query required: true schema: { type: integer } - name: year in: query schema: { type: integer } - name: month in: query schema: { type: integer } - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: A list of employees. content: application/json: schema: type: array items: $ref: '#/components/schemas/Employee' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createEmployee tags: [Employees] summary: Create an employee requestBody: required: true content: application/json: schema: type: object required: [company_id, employee] properties: company_id: { type: integer } employee: type: object additionalProperties: true responses: '201': description: The created employee. content: application/json: schema: $ref: '#/components/schemas/Employee' '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/employees/{id}: parameters: - $ref: '#/components/parameters/PathId' get: operationId: getEmployee tags: [Employees] summary: Get an employee parameters: - name: company_id in: query required: true schema: { type: integer } - name: year in: query schema: { type: integer } - name: month in: query schema: { type: integer } responses: '200': description: The requested employee. content: application/json: schema: $ref: '#/components/schemas/Employee' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateEmployee tags: [Employees] summary: Update an employee requestBody: required: true content: application/json: schema: type: object properties: company_id: { type: integer } employee: type: object additionalProperties: true responses: '200': description: The updated employee. content: application/json: schema: $ref: '#/components/schemas/Employee' '401': $ref: '#/components/responses/Unauthorized' delete: operationId: deleteEmployee tags: [Employees] summary: Delete an employee parameters: - name: company_id in: query required: true schema: { type: integer } responses: '204': description: The employee was deleted. '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/salaries/employee_payroll_statements: get: operationId: getEmployeePayrollStatements tags: [Payroll] summary: List employee payroll statements description: >- Lists employee salary payroll statements (給与明細) for an HR company and pay month. parameters: - name: company_id in: query required: true schema: { type: integer } - name: year in: query required: true schema: { type: integer } - name: month in: query required: true schema: { type: integer } - $ref: '#/components/parameters/Limit' - $ref: '#/components/parameters/Offset' responses: '200': description: A list of payroll statements. content: application/json: schema: type: object properties: employee_payroll_statements: type: array items: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/employees/{employee_id}/time_clocks: parameters: - name: employee_id in: path required: true schema: { type: integer } get: operationId: getTimeClocks tags: [Attendance] summary: List time clocks description: Lists an employee's time-clock punches (打刻). parameters: - name: company_id in: query required: true schema: { type: integer } - name: from_date in: query schema: { type: string, format: date } - name: to_date in: query schema: { type: string, format: date } responses: '200': description: A list of time clocks. content: application/json: schema: type: array items: $ref: '#/components/schemas/TimeClock' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createTimeClock tags: [Attendance] summary: Register a time clock description: Registers a time-clock punch (clock in / out / break) for an employee. requestBody: required: true content: application/json: schema: type: object required: [company_id, type] properties: company_id: { type: integer } type: type: string enum: [clock_in, break_begin, break_end, clock_out] datetime: { type: string } base_date: { type: string, format: date } responses: '201': description: The registered time clock. content: application/json: schema: $ref: '#/components/schemas/TimeClock' '401': $ref: '#/components/responses/Unauthorized' /hr/api/v1/employees/{employee_id}/work_records/{date}: parameters: - name: employee_id in: path required: true schema: { type: integer } - name: date in: path required: true schema: { type: string, format: date } get: operationId: getWorkRecord tags: [Attendance] summary: Get a work record description: Returns an employee's attendance work record (勤怠) for a single day. parameters: - name: company_id in: query required: true schema: { type: integer } responses: '200': description: The work record for the day. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: operationId: updateWorkRecord tags: [Attendance] summary: Update a work record requestBody: required: true content: application/json: schema: type: object properties: company_id: { type: integer } clock_in_at: { type: string } clock_out_at: { type: string } responses: '200': description: The updated work record. content: application/json: schema: type: object additionalProperties: true '401': $ref: '#/components/responses/Unauthorized' delete: operationId: deleteWorkRecord tags: [Attendance] summary: Delete a work record parameters: - name: company_id in: query required: true schema: { type: integer } responses: '204': description: The work record was deleted. '401': $ref: '#/components/responses/Unauthorized' components: securitySchemes: oauth2: type: oauth2 description: >- freee unified OAuth 2.0. Obtain an access token via the authorization code grant and send it as `Authorization: Bearer ` on every request. The same token works across freee products (accounting, HR/payroll, invoicing) subject to the granted scopes. flows: authorizationCode: authorizationUrl: https://accounts.secure.freee.co.jp/public_api/authorize tokenUrl: https://accounts.secure.freee.co.jp/public_api/token scopes: read: データの読み取り (read data) write: データの書き込み (write data) parameters: PathId: name: id in: path required: true description: The numeric identifier of the resource. schema: type: integer CompanyIdQueryRequired: name: company_id in: query required: true description: The freee company (事業所) ID the request is scoped to. schema: type: integer Offset: name: offset in: query required: false schema: type: integer Limit: name: limit in: query required: false schema: type: integer default: 20 responses: BadRequest: description: The request was malformed or failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or invalid OAuth 2.0 Bearer token. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Error: type: object properties: status_code: type: integer errors: type: array items: type: object properties: type: type: string messages: type: array items: type: string Company: type: object properties: id: type: integer name: type: string description: Company name (事業所名). name_kana: type: string display_name: type: string role: type: string description: The authenticated user's role in this company. Deal: type: object properties: id: type: integer company_id: type: integer issue_date: type: string format: date due_date: type: string format: date amount: type: integer due_amount: type: integer type: type: string enum: [income, expense] partner_id: type: integer status: type: string enum: [unsettled, settled] details: type: array items: $ref: '#/components/schemas/DealDetail' DealDetail: type: object properties: id: type: integer account_item_id: type: integer tax_code: type: integer amount: type: integer vat: type: integer description: type: string DealCreateParams: type: object required: [company_id, issue_date, type, details] properties: company_id: type: integer issue_date: type: string format: date due_date: type: string format: date type: type: string enum: [income, expense] partner_id: type: integer details: type: array items: type: object required: [account_item_id, tax_code, amount] properties: account_item_id: type: integer tax_code: type: integer amount: type: integer description: type: string AccountItem: type: object properties: id: type: integer name: type: string tax_code: type: integer account_category: type: string available: type: boolean Partner: type: object properties: id: type: integer code: type: string name: type: string long_name: type: string name_kana: type: string country_code: type: string Invoice: type: object properties: id: type: integer company_id: type: integer invoice_number: type: string issue_date: type: string format: date partner_id: type: integer total_amount: type: integer invoice_status: type: string description: Invoice lifecycle status (draft, applying, approved, submitted, unsubmitted). WalletTxn: type: object properties: id: type: integer company_id: type: integer date: type: string format: date amount: type: integer entry_side: type: string enum: [income, expense] walletable_type: type: string enum: [bank_account, credit_card, wallet] walletable_id: type: integer description: type: string Employee: type: object properties: id: type: integer num: type: string description: Employee number (従業員番号). display_name: type: string entry_date: type: string format: date retire_date: type: string format: date TimeClock: type: object properties: id: type: integer date: type: string format: date type: type: string enum: [clock_in, break_begin, break_end, clock_out] datetime: type: string