# Spendesk API Documentation > Guides, recipes and API reference for the Spendesk API: spend data, accounting exports, invoices, cards, webhooks, and an MCP server for AI assistants. ## Documentation: Getting started - [Introduction](https://developer.spendesk.com/reference/general.md): What the Spendesk API lets you do — spend data, reference data, accounting, purchasing, cards and webhooks — and where to start as a customer, a partner or on the demo. - [Getting access](https://developer.spendesk.com/reference/getting-access.md): Which access you need, who sets it up in Spendesk, and which scopes to ask for. - [Quickstart](https://developer.spendesk.com/reference/quickstart.md): Make your first Spendesk API call in five minutes — with Postman, curl or a short script. - [How to Authenticate](https://developer.spendesk.com/reference/how-to-authenticate.md): Get an access token with an API key (customers) or OAuth2 (partners), how long it stays valid, and how to renew it. - [Organisation-level access (multi-entity)](https://developer.spendesk.com/reference/organisation-level-access.md): Use one token for every entity of a Spendesk organisation: list its companies, then scope each call to the entity you want. - [Postman collection](https://developer.spendesk.com/reference/postman.md): Guidance on using our public Postman collection. - [Using this documentation with an AI assistant](https://developer.spendesk.com/reference/using-the-docs-with-an-ai-assistant.md): How an AI assistant or coding agent can read this documentation: llms.txt, the Markdown version of every page, the documentation's MCP server and the OpenAPI definition — and which source to trust. ## Documentation: Conventions - [Scopes](https://developer.spendesk.com/reference/scopes.md): Every OAuth scope of the API and what it opens, how to request a token with fewer scopes, and how to get the experimental ones. - [Pagination](https://developer.spendesk.com/reference/pagination.md): How list endpoints paginate — page-based, cursor or offset — the page-size limits, and what a page past the last one returns. - [Error Handling](https://developer.spendesk.com/reference/error-handling.md): The error model (code, detail, source, correlation ID), the HTTP codes the API returns, and partial success (207) on bulk updates. - [Rate Limiting](https://developer.spendesk.com/reference/rate-limiting.md): The API's rate limits, the response headers that report what is left, and how to design an integration that avoids 429 errors. - [Data Types](https://developer.spendesk.com/reference/data-types.md): Formats used across the API: ISO 8601 dates and date-times in UTC, ISO 4217 currency codes, and amounts in minor units. - [Versioning & Deprecation](https://developer.spendesk.com/reference/versioning-deprecation.md): How the API is versioned, which changes are backwards compatible, and how deprecations and sunsets are announced (Deprecation header). - [Using webhooks (experimental)](https://developer.spendesk.com/reference/using-webhooks.md): Receive a call when a payable is created or prepared or a settlement is created (experimental): access, set-up, events and payload. ## Documentation: Use cases - [Building an accounting integration](https://developer.spendesk.com/reference/building-an-accounting-integration.md): Connect Spendesk to an ERP or accounting system: keep its chart of accounts in Spendesk, post every prepared expense and payment into it, and tell Spendesk what was posted. - [Exporting accounting data](https://developer.spendesk.com/reference/exporting-accounting-data.md): Get your purchase and bank journals out of Spendesk, and tell Spendesk what you exported so nothing is exported twice. - [Managing purchase orders](https://developer.spendesk.com/reference/managing-purchase-orders.md): Follow committed spend, create purchase orders from your ERP or procurement tool, track their billing, and close or cancel them. - [Following card spend](https://developer.spendesk.com/reference/following-card-spend.md): Follow your company's cards, the spend requests behind them, and the card payments — settled and declined. - [Connect an AI assistant (MCP)](https://developer.spendesk.com/reference/connect-an-ai-assistant-mcp.md): Ask your AI assistant about your company's spend, invoices and accounting — and act on them — through the Spendesk MCP server. - [Set up Claude, ChatGPT or Dust (MCP)](https://developer.spendesk.com/reference/mcp-set-up-claude-chatgpt-dust.md): The admin steps, on the Spendesk side and in the assistant, to make the Spendesk MCP server available to your team — and what each user does next. - [Using the AI assistant safely (MCP)](https://developer.spendesk.com/reference/mcp-using-the-assistant-safely.md): What protects you when an AI assistant works with your Spendesk data, what to know about AI assistants before allowing them to act, and how to roll it out safely. - [Assistant actions and safety (MCP)](https://developer.spendesk.com/reference/mcp-actions-and-safety.md): What an AI assistant connected to Spendesk can change, what cannot be undone, and what keeps it in check — to read before you tick a write permission. - [MCP tool reference](https://developer.spendesk.com/reference/mcp-tool-reference.md): Every tool of the Spendesk MCP server: what it does, whether it reads or acts, the permission it needs, and whether its action can be undone. - [MCP errors and limits](https://developer.spendesk.com/reference/mcp-errors-and-limits.md): What each error from the Spendesk MCP server means and what to do about it: missing permissions, roles, companies, stale versions, large queries and rate limits. - [What is Spend Data?](https://developer.spendesk.com/reference/how-to-use-spend-data.md): Spendesk's accounting model: payables, settlements and bank fees, how they relate, and a payable's lifecycle from approval to export. - [Retrieving Spend Data](https://developer.spendesk.com/reference/retrieving-snapshots-of-payables.md): Get payables in bulk with an asynchronous snapshot: request it, poll until it is complete, then read it while it stays cached. ## Documentation: Recipes - [Running the recipes](https://developer.spendesk.com/reference/running-the-recipes.md): Short, ready-to-use answers to everyday finance questions — with Postman, an AI assistant, or a small script. - [Export a month of spend to a spreadsheet](https://developer.spendesk.com/reference/export-a-month-of-spend-to-a-spreadsheet.md): Every expense of a month in a CSV: supplier or employee, amount, cost center, bookkeeping status and receipt. - [List the invoices due this week](https://developer.spendesk.com/reference/list-the-invoices-due-this-week.md): The approved supplier invoices to pay in the next days, overdue ones first, with the total still due per currency. - [Month-end close checklist](https://developer.spendesk.com/reference/month-end-close-checklist.md): What is still missing before closing a month: receipts, exports to accounting, approvals, failed exports. - [Check the wallet balance](https://developer.spendesk.com/reference/check-the-wallet-balance.md): The wallet balance, what is available or committed, and the latest wallet loads. ## Documentation: Spendesk Public API - [API Reference](https://developer.spendesk.com/reference/introduction.md): How the generated API reference is organised, how to try an endpoint from the browser, and where to download the OpenAPI definition. - Authentication - [Create Access Token (Public API credentials)](https://developer.spendesk.com/reference/v1-create-auth-token.md): Create an access token for Public API credentials. Use this endpoint for server-to-server integrations that were issued Public API credentials. Send `Authorization: Basic… - Company - [Get Companies](https://developer.spendesk.com/reference/v2-get-companies.md): **Allowed Scopes**: _`experimental:company:read`_ Returns companies (legal entities) in the organisation. Only accessible with an organisation-level token. For OAuth2 (user-consented) tokens,… - Spend Data - [Get Settlements](https://developer.spendesk.com/reference/v1-get-settlements.md): **Allowed Scopes**: _`settlement:read`_ Returns settlements. For more information about settlements, see [this guide](/reference/how-to-use-spend-data). Settlements data are cached for up to 24… - [Update settlements state](https://developer.spendesk.com/reference/v1-put-settlements-state.md): **Allowed Scopes**: _`experimental:accounting:update`_ Mark multiple settlements as manually exported after their accounting entries were created outside Spendesk. - [Get Bank Fees](https://developer.spendesk.com/reference/v1-get-bank-fees.md): **Allowed Scopes**: _`bank-fee:read`_ Returns bank fees. For more information about bank fees, see [this guide](/reference/how-to-use-spend-data). Bank fees data are cached for up to 24 hours.… - [Create a snapshot of payables](https://developer.spendesk.com/reference/v1-create-snapshot-payables.md): **Allowed Scopes**: _`payable:read`_ Request an extract (snapshot) of expenses to be created. A request to create a snapshot of expenses according to the filters provided will be queued, where a… - [Get a snapshot of payables](https://developer.spendesk.com/reference/v1-get-snapshot-payables.md): **Allowed Scopes**: _`payable:read`_ Returns an extract (snapshot) of payables requested via the [POST API](/reference/v1-create-snapshot-payables). Requires the returned key as a parameter. Due to… - [Get Payable by ID](https://developer.spendesk.com/reference/v1-get-payable-by-id.md): **Allowed Scopes**: _`payable:read`_ Retrieves a single payable by its ID. Payable data is cached for up to 20 minutes. Changes made through the API are returned by subsequent reads; changes made in… - [Get Payable Attachments](https://developer.spendesk.com/reference/v1-get-payable-attachments.md): **Allowed Scopes**: _`payable-attachment:read`_ Returns attachments for a given payable as short lived URLs. Download and save downloaded files in your long term storage. Payable attachment data is… - [Update Payables bookkeeping status](https://developer.spendesk.com/reference/v1-put-payables-bookkeeping-status.md): **Allowed Scopes**: _`experimental:accounting:update`_ Update the accounting status for multiple Payables. The user associated with the token must have the Controller role in the company.… - [Get Wallet Loads](https://developer.spendesk.com/reference/v1-get-wallet-loads.md): **Allowed Scopes**: _`wallet-load:read`_ Returns wallet loads of the Spendesk entity (company), either via wiretransfers to Spendesk or via card payments. On GBP wallets `page` is ignored: while… - [Get Wallet Summary](https://developer.spendesk.com/reference/v1-get-wallet-summary.md): **Allowed Scopes**: _`wallet-summary:read`_ Return the details of the wallet (Spendesk entity), such as company name, remaining amounts, etc. Wallet summary data is cached for up to 20 minutes.… - [Search Payables](https://developer.spendesk.com/reference/v1-search-payables.md): **Allowed Scopes**: _`experimental:payable-search:read`_ Searches payables using filters with cursor-based pagination. With an organisation-level token, each search covers the company in… - [Create Payable Attachment Upload](https://developer.spendesk.com/reference/v1-create-payable-attachment-upload.md): **Allowed Scopes**: _`experimental:payable-attachment:write`_ Creates a presigned upload target for a receipt attachment on a payable. This first version supports card transaction payables only.… - [Get Purchase Order Document](https://developer.spendesk.com/reference/v1-get-purchase-order-document.md): **Allowed Scopes**: _`experimental:purchase-order:read`_ Returns the document for a given purchase order as a short lived URL. Download and save the file in your long term storage. Purchase order… - [Mark Payable as ready](https://developer.spendesk.com/reference/v1-post-payable-mark-as-ready.md): **Allowed Scopes**: _`experimental:accounting:update`_ Validates a Payable and marks it as ready for accounting export when all required bookkeeping information is present. The user associated with… - [Update Payable accounting fields](https://developer.spendesk.com/reference/v1-patch-payable-accounting-fields.md): **Allowed Scopes**: _`experimental:accounting:update`_ Updates accounting fields for one Payable with optimistic locking. The user associated with the token must have the Controller role in the… - Accounting exports - [Get available journal templates](https://developer.spendesk.com/reference/v1-get-journal-templates.md): **Allowed Scopes**: _`experimental:accounting-export:read`_ Returns available journal templates. Accounting software and journal template data are cached for up to 24 hours. Changes, including those… - [Get a journal CSV content](https://developer.spendesk.com/reference/v1-get-journal.md): **Allowed Scopes**: _`experimental:accounting-export:read`_ Returns the requested journal CSV content. Journal content data is cached for up to 24 hours. Changes, including those made through the… - [Create an accounting export](https://developer.spendesk.com/reference/v1-create-journal.md): **Allowed Scopes**: _`experimental:accounting-export:read`_ or _`experimental:accounting-export:write`_ Either scope is accepted today. With `markEntriesAsExported: true`, the exported entries are… - [Get entity export status](https://developer.spendesk.com/reference/v1-get-integrations-export-status.md): Returns entity IDs filtered by export status within the given date range. A maximum date range of 1 year is allowed. Export status data is cached for up to 24 hours. Changes, including those made… - OAuth2 - [Request Authorization (OAuth app PKCE)](https://developer.spendesk.com/reference/v1-request-authorization.md): Start the PKCE authorization-code flow for an OAuth app. Use this endpoint only for OAuth app credentials that require a Spendesk user to authorize access. Do not use it with Public API credentials;… - [OAuth2 Token Endpoint (OAuth app PKCE)](https://developer.spendesk.com/reference/v1-create-oauth2-token.md): Standard OAuth2 token endpoint for OAuth app credentials. Use `grant_type=authorization_code` to exchange an authorization code for access and refresh tokens after [Request… - [Refresh Token (Deprecated)](https://developer.spendesk.com/reference/v1-refresh-oauth2-token.md): Deprecated compatibility endpoint. Prefer the [OAuth2 token endpoint](/reference/v1-create-oauth2-token) with `grant_type=refresh_token`. OAuth token requests should be sent as… - [MCP Protected Resource Metadata](https://developer.spendesk.com/reference/mcp-protected-resource-metadata-mcp.md): Returns OAuth2 protected resource metadata scoped to the MCP resource path, as defined by RFC 9728. - [Authorization Server Metadata](https://developer.spendesk.com/reference/mcp-authorization-server-metadata.md): Returns OAuth2 authorization server metadata as defined by RFC 8414. Used by MCP clients to discover endpoints for authorization, token exchange, and dynamic registration. - [Dynamic Client Registration](https://developer.spendesk.com/reference/v1-register-oauth2-client.md): Registers an MCP OAuth2 client using the RFC 7591 Dynamic Client Registration flow. - Accounts - [Get accounts](https://developer.spendesk.com/reference/v1-get-accounts.md): **Allowed Scopes**: _`experimental:chart-of-accounts:read`_ Returns accounts from accounting integrations. Account data is cached for up to 24 hours. Changes made through the API are returned by… - [Create account](https://developer.spendesk.com/reference/v1-create-account.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Creates a new account for the selected account type. If the account has a code, is not archived, and a non-archived account of the same… - [Bulk update accounts](https://developer.spendesk.com/reference/v1-sync-accounts.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Bulk syncs (creates or upserts) accounts for the selected account type. Each item replaces the stored account: an omitted description,… - [Get account by id](https://developer.spendesk.com/reference/v1-get-account-by-id.md): **Allowed Scopes**: _`experimental:chart-of-accounts:read`_ Returns a single account by id. Account data is cached for up to 24 hours. Changes made through the API are returned by subsequent reads;… - [Archive account](https://developer.spendesk.com/reference/v1-delete-account.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Archives an existing account. Neither the account lookup used before archiving nor the archive call is cached. - [Set account purpose](https://developer.spendesk.com/reference/v1-set-account-purpose.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Sets the purpose for one or more accounts. - [Search creditor account assignments](https://developer.spendesk.com/reference/v1-search-creditor-account-assignments.md): **Allowed Scopes**: _`experimental:chart-of-accounts:read`_ Searches creditor to account assignments. Creditor account assignment data is cached for up to 24 hours. Changes made through the API are… - [Assign creditors to accounts](https://developer.spendesk.com/reference/v1-assign-creditors-to-accounts.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Assigns creditors to accounts. - [Remove creditors from accounts](https://developer.spendesk.com/reference/v1-remove-creditors-from-accounts.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Removes creditor assignments from accounts. - [Bulk patch accounts](https://developer.spendesk.com/reference/v1-patch-accounts.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Partially updates one or more existing accounts by id. Validation is all-or-nothing: if any item has no field to update (400) or any id… - Accounting - [Get external references](https://developer.spendesk.com/reference/v1-get-external-references.md): **Allowed Scopes**: _`experimental:external-reference:read`_ Returns the IDs Spendesk entities have in an external system (ERP), as one entry per (entity, external ID) pair. Filter by… - [Upsert external references](https://developer.spendesk.com/reference/v1-upsert-external-references.md): **Allowed Scopes**: _`experimental:external-reference:write`_ Records the ID a Spendesk entity has in an external system (ERP), namespaced by `provider`. Re-sending the same `(entityType,… - [Refresh accounting integration settings](https://developer.spendesk.com/reference/v1-post-experimental-integrations-refresh-settings.md): **Allowed Scopes**: _`experimental:chart-of-accounts:write`_ Triggers a refresh of the company's accounting integration settings, pulling accounts, tax accounts, analytical fields, suppliers,… - Suppliers and Users - [Get Suppliers](https://developer.spendesk.com/reference/v1-get-suppliers.md): **Allowed Scopes**: _`supplier:read`_ Returns suppliers existing in the Spendesk entity (company). Supplier data is cached for up to 24 hours; supplier account data (used for `accountPayable`) is… - [Get Supplier By Id](https://developer.spendesk.com/reference/v1-get-supplier-by-id.md): **Allowed Scopes**: _`supplier:read`_ Retrieves a single supplier by its ID. Supplier data is cached for up to 24 hours; supplier account data (used for `accountPayable`) is cached for up to 20… - [Get Users](https://developer.spendesk.com/reference/v1-get-users.md): **Allowed Scopes**: _`user:read`_ Returns members (users) of the Spendesk entity (company). User data is cached for up to 20 minutes. Changes, including those made through the API, can take up to 20… - [Get User By Id](https://developer.spendesk.com/reference/v1-get-user-by-id.md): **Allowed Scopes**: _`user:read`_ Retrieves a member (user) by its ID. User data is cached for up to 20 minutes. Changes, including those made through the API, can take up to 20 minutes to appear. - [Archive/Unarchive Supplier](https://developer.spendesk.com/reference/v1-patch-supplier-status.md): **Allowed Scopes**: _`experimental:supplier:manage`_ Archives or unarchives supplier by id. - [Archive/Unarchive Suppliers](https://developer.spendesk.com/reference/v1-patch-suppliers-status.md): **Allowed Scopes**: _`experimental:supplier:manage`_ Archives or unarchives suppliers. - [Create Supplier(s)](https://developer.spendesk.com/reference/v1-create-suppliers.md): **Allowed Scopes**: _`experimental:supplier:manage`_ Create one or multiple suppliers. Send an array of 1 to 100 supplier objects; a single object outside an array is rejected with a 400. A one-item… - [Update Suppliers](https://developer.spendesk.com/reference/v1-update-suppliers.md): **Allowed Scopes**: _`experimental:supplier:manage`_ Update multiple suppliers. Accepts an array of supplier update objects (minimum 2 items), each containing an id field. For a single supplier use… - [Update Supplier](https://developer.spendesk.com/reference/v1-update-supplier.md): **Allowed Scopes**: _`experimental:supplier:manage`_ Update a single supplier by ID. - Analytical - [Get Analytical Fields](https://developer.spendesk.com/reference/v1-get-analytical-fields.md): **Allowed Scopes**: _`analytical-field:read`_ Returns analytical fields existing (or archived) in the Spendesk entity (company). Analytical fields data are cached for up to 24 hours. Changes,… - [Get Analytical Values](https://developer.spendesk.com/reference/v1-get-analytical-field-values.md): **Allowed Scopes**: _`analytical-field:read`_ Returns values of the specified analytical field. Analytical field values data are cached for up to 24 hours. Changes, including those made through the… - [Get Expense Categories](https://developer.spendesk.com/reference/v1-get-expense-categories.md): **Allowed Scopes**: _`expense-category:read`_ Returns expense categories of the Spendesk entity (company). Expense category and cost center data are cached for up to 24 hours. Changes, including… - [Get Cost Centers](https://developer.spendesk.com/reference/v1-get-cost-centers.md): **Allowed Scopes**: _`cost-center:read`_ Returns cost centers of the Spendesk entity (company). Cost centers data are cached for up to 24 hours. Changes made through the API are returned by… - [Create Cost Centers](https://developer.spendesk.com/reference/v1-create-cost-centers.md): **Allowed Scopes**: _`cost-center:manage`_ Create a new cost center. - [Update Cost Centers](https://developer.spendesk.com/reference/v1-update-cost-centers.md): **Allowed Scopes**: _`cost-center:manage`_ Update an existing cost center. - [Delete Cost Centers](https://developer.spendesk.com/reference/v1-delete-cost-centers.md): **Allowed Scopes**: _`cost-center:manage`_ Delete an existing cost center. - [List Analytical Fields](https://developer.spendesk.com/reference/v2-list-analytical-fields.md): **Allowed Scopes**: _`experimental:analytical-field-v2:read`_ Returns analytical fields for the company, excluding the expense categories field. Analytical fields data are cached for up to 24 hours.… - [Get Analytical Field](https://developer.spendesk.com/reference/v2-get-analytical-field.md): **Allowed Scopes**: _`experimental:analytical-field-v2:read`_ Returns a single analytical field by ID. Returns 404 if the field does not exist or if the ID belongs to the expense categories field.… - [List Analytical Field Values](https://developer.spendesk.com/reference/v2-list-analytical-field-values.md): **Allowed Scopes**: _`experimental:analytical-field-v2:read`_ Returns values for an analytical field, using forward-only cursor pagination. Returns 404 if the field does not exist or if the ID… - [Get Analytical Field Value](https://developer.spendesk.com/reference/v2-get-analytical-field-value.md): **Allowed Scopes**: _`experimental:analytical-field-v2:read`_ Returns a single analytical field value by ID. Returns 404 if the field does not exist, or if the value does not exist or does not… - [List Expense Category Fields](https://developer.spendesk.com/reference/v2-list-expense-category-fields.md): **Allowed Scopes**: _`experimental:expense-category-v2:read`_ Returns the expense category field for the company. The array is empty if the company has no expense category field configured. Expense… - [Get Expense Category Field](https://developer.spendesk.com/reference/v2-get-expense-category-field.md): **Allowed Scopes**: _`experimental:expense-category-v2:read`_ Returns a single expense category field by ID. Returns 404 if the field does not exist. Expense category field data is cached for up to… - [List Expense Categories](https://developer.spendesk.com/reference/v2-list-expense-categories.md): **Allowed Scopes**: _`experimental:expense-category-v2:read`_ Returns expense categories for the expense category field, using forward-only cursor pagination. Returns 404 if the field does not… - [Get Expense Category](https://developer.spendesk.com/reference/v2-get-expense-category.md): **Allowed Scopes**: _`experimental:expense-category-v2:read`_ Returns a single expense category by ID for the expense category field. Returns 404 if the field or the category does not exist. Expense… - [Create Analytical Field](https://developer.spendesk.com/reference/v2-create-analytical-field.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Creates an analytical field for the company. Returns 409 if the company has reached the maximum number of analytical fields. - [Update Analytical Field](https://developer.spendesk.com/reference/v2-update-analytical-field.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Partially updates an analytical field. Returns 404 if the field does not exist or if the ID belongs to the expense categories field. - [Delete Analytical Field](https://developer.spendesk.com/reference/v2-delete-analytical-field.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Archives an analytical field by ID: it stays listed with archivedAt set, its values are not archived with it, and later writes or… - [Create Analytical Field Value](https://developer.spendesk.com/reference/v2-create-analytical-field-value.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Creates a value for an analytical field. Returns 404 if the field does not exist. Returns 409 if a value with the same name already… - [Update Analytical Field Value](https://developer.spendesk.com/reference/v2-update-analytical-field-value.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Partially updates a value of an analytical field. Returns 404 if the field or the value does not exist. Returns 409 if a value with the… - [Delete Analytical Field Value](https://developer.spendesk.com/reference/v2-delete-analytical-field-value.md): **Allowed Scopes**: _`experimental:analytical-field-v2:write`_ Archives a value of an analytical field by ID: it stays listed with archivedAt set, and later writes or deletes on it return 404.… - [Create Expense Category Field](https://developer.spendesk.com/reference/v2-create-expense-category-field.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Creates the company's expense category field. A company can only have one expense category field; creating a second one returns a 409. - [Update Expense Category Field](https://developer.spendesk.com/reference/v2-update-expense-category-field.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Updates the company's expense category field. Only the provided properties are changed; omitted properties are left untouched. Returns… - [Delete Expense Category Field](https://developer.spendesk.com/reference/v2-delete-expense-category-field.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Deletes an expense category field by ID. Returns 404 if the field does not exist. - [Create Expense Category](https://developer.spendesk.com/reference/v2-create-expense-category.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Creates a new expense category for the expense category field. Returns 404 if the field or a cost center in costCenters does not exist.… - [Update Expense Category](https://developer.spendesk.com/reference/v2-update-expense-category.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Partially updates an existing expense category for the expense category field. Returns 404 if the field, the category or a cost center… - [Delete Expense Category](https://developer.spendesk.com/reference/v2-delete-expense-category.md): **Allowed Scopes**: _`experimental:expense-category-v2:write`_ Archives an expense category by ID for the expense category field: it stays listed with isArchived set to true, and later updates on it… - payables-created - [payables-created](https://developer.spendesk.com/reference/post_payables-created.md) - settlement-created - [settlement-created](https://developer.spendesk.com/reference/post_settlement-created.md) - Purchase Orders - [Get Purchase Orders](https://developer.spendesk.com/reference/v1-get-purchase-orders.md): **Allowed Scopes**: _`experimental:purchase-order:read`_ Returns purchase orders. Purchase order data is cached for up to 2 hours. Changes made through the API are returned by subsequent reads;… - [Create a purchase order](https://developer.spendesk.com/reference/v1-create-purchase-order.md): **Allowed Scopes**: _`experimental:purchase-order:write`_ Create a purchase order. - [Get a purchase order by ID](https://developer.spendesk.com/reference/v1-get-purchase-order.md): **Allowed Scopes**: _`experimental:purchase-order:read`_ Returns a purchase order by ID. Purchase order data is cached for up to 24 hours. Changes made through the API are returned by subsequent… - [Cancel a purchase order](https://developer.spendesk.com/reference/v1-cancel-purchase-order.md): **Allowed Scopes**: _`experimental:purchase-order:write`_ Cancel an existing purchase order by ID. - [Close a purchase order](https://developer.spendesk.com/reference/v1-close-purchase-order.md): **Allowed Scopes**: _`experimental:purchase-order:write`_ Close an existing purchase order by ID. Closing a purchase order prevents further modifications. - Invoices - [List invoices](https://developer.spendesk.com/reference/v2-list-invoices.md): **Allowed Scopes**: _`experimental:invoice:read`_ Returns supplier invoices for the company, most-recent first by default, using forward-only cursor pagination. The `createdAfter`, `createdBefore`,… - [Summarise invoices](https://developer.spendesk.com/reference/v2-get-invoices-summary.md): **Allowed Scopes**: _`experimental:invoice:read`_ Returns aggregate figures (count + amount totals by currency) over all invoices matching the filters. With no `type` filter, only invoices are… - [Get an invoice](https://developer.spendesk.com/reference/v2-get-invoice.md): **Allowed Scopes**: _`experimental:invoice:read`_ Returns a single supplier invoice by id. Invoice data is cached for up to 20 minutes. Changes, including those made through the API, can take up to… - Physical Cards - [Get a Card Order](https://developer.spendesk.com/reference/v1-get-card-order.md): **Allowed Scopes**: _`experimental:card:read`_ Returns physical card order/shipping info for a card, regardless of its current status. 404 when no order is on file (always the case for a virtual… - Intakes - [Create an intake file upload](https://developer.spendesk.com/reference/v2-create-intake-file-upload.md): **Allowed Scopes**: _`experimental:intake:write`_ Creates a presigned upload target for an intake file. This is step 1 of 3 in creating an intake from a document: 1. Create an upload with this… - [Get an intake file upload status](https://developer.spendesk.com/reference/v2-get-intake-file-upload-status.md): **Allowed Scopes**: _`experimental:intake:write`_ Returns the status of an intake file upload. This is step 2 of 3 in creating an intake from a document, after [Create an intake file… - [Create an intake](https://developer.spendesk.com/reference/v2-post-company-intakes.md): **Allowed Scopes**: _`experimental:intake:write`_ Create a new incoming invoice or credit note for a company's invoice inbox. This is step 3 of 3 in creating an intake from a document. `documentId`… - [List intakes](https://developer.spendesk.com/reference/v2-list-company-intakes.md): **Allowed Scopes**: _`experimental:intake:read`_ Returns the company's intakes — supplier documents (invoices, credit notes, receipts) received by the company and being reviewed and processed —… - [Get an intake](https://developer.spendesk.com/reference/v2-get-company-intake.md): **Allowed Scopes**: _`experimental:intake:read`_ Returns a single intake by id: everything [List intakes](/reference/v2-list-company-intakes) returns for it, plus the received files in `documents` —… - Virtual Cards - [Get Cards](https://developer.spendesk.com/reference/v1-get-cards.md): **Allowed Scopes**: _`experimental:card:read`_ Returns cards for the authenticated company. Lost, stolen, damaged, expired and cancelled cards are not listed. - [Get a Card](https://developer.spendesk.com/reference/v1-get-card.md): **Allowed Scopes**: _`experimental:card:read`_ Returns a single card by ID. - [Get Requests](https://developer.spendesk.com/reference/v1-get-requests.md): **Allowed Scopes**: _`experimental:request:read`_ Returns card requests for the authenticated company. Only these request types are listed: `single_purchase`, `subscription`, `multi_use_card`,… - [Get a Request](https://developer.spendesk.com/reference/v1-get-request.md): **Allowed Scopes**: _`experimental:request:read`_ Returns a single request by ID. Only card requests are returned: `single_purchase`, `subscription`, `multi_use_card`, `multi_use_card_top_up`,… - [Get Transactions (Deprecated)](https://developer.spendesk.com/reference/v1-get-transactions.md): **Allowed Scopes**: _`experimental:transaction:read`_ Deprecated compatibility endpoint. Prefer `GET /v1/transactions/successful` and `GET /v1/transactions/failed`, which have distinct, more accurate… - [Get Successful Transactions](https://developer.spendesk.com/reference/v1-get-successful-transactions.md): **Allowed Scopes**: _`experimental:transaction:read`_ Returns successful (settled) card transactions for the authenticated company, with pagination. For declined transactions, use `GET… - [Get Failed Transactions](https://developer.spendesk.com/reference/v1-get-failed-transactions.md): **Allowed Scopes**: _`experimental:transaction:read`_ Returns declined card transactions for the authenticated company, covering the last 30 days when `startDate` is omitted (even when `endDate` is… - [Get a Card Blocking History](https://developer.spendesk.com/reference/v1-get-card-blocking-history.md): **Allowed Scopes**: _`experimental:card:read`_ Returns the full block/unblock history for a card, regardless of its current status — every reason on the card, active and past, not just the current… - Webhooks Admin - [Create a webhook instance](https://developer.spendesk.com/reference/v1-create-webhook.md): **Allowed Scopes**: _`experimental:webhooks:write`_ Creates one or multiple webhook instances. Each instance will be linked to a company and a specific event. Maximum of 50 instances can be… - [Get all webhook instances ordered by creation date.](https://developer.spendesk.com/reference/v1-get-webhook.md): **Allowed Scopes**: _`experimental:webhooks:read`_ Returns zero or more configured webhook instances for the company in question. Webhook instances are disabled either manually by API requests… - [Get a webhook instance by id.](https://developer.spendesk.com/reference/v1-get-webhook-by-id.md): **Allowed Scopes**: _`experimental:webhooks:read`_ Get a single webhook instance for the company in question. Webhook instances are disabled either manually by API requests or by Spendesk if… - [Update a webhook instance](https://developer.spendesk.com/reference/v1-update-webhook.md): **Allowed Scopes**: _`experimental:webhooks:write`_ Update a webhook instance for the company in question. Use this resource to re-enable a webhook if this has been disabled due to failing the… - [Delete a webhook instance](https://developer.spendesk.com/reference/v1-delete-webhook.md): **Allowed Scopes**: _`experimental:webhooks:write`_ Delete a webhook instance for the company in question. If the webhook instance is no longer needed or the max number of instances has been… - MCP - [Send MCP messages](https://developer.spendesk.com/reference/v1-post-mcp.md) - [Open the MCP event stream](https://developer.spendesk.com/reference/v1-get-mcp.md) - [End an MCP session](https://developer.spendesk.com/reference/v1-delete-mcp.md) - payables-prepared - [payables-prepared](https://developer.spendesk.com/reference/post_payables-prepared.md) ## Pages - [Register your interest (API)](https://developer.spendesk.com/page/register-your-interest-api.md) - [Register your interest (integrations)](https://developer.spendesk.com/page/register-your-interest-integrations.md) ## Changelog - [MCP: managing cost centers and physical card settings](https://developer.spendesk.com/changelog/mcp-managing-cost-centers-and-physical-card-settings.md) - [Purchase orders: a refused cancel or close now returns 400 (experimental)](https://developer.spendesk.com/changelog/purchase-orders-a-refused-cancel-or-close-now-returns-400-experimental.md) - [Invoices: stage replaces approvalStatus (experimental)](https://developer.spendesk.com/changelog/invoices-stage-replaces-approvalstatus-experimental.md) - [Cost center, analytical splits and expense categories on invoices (experimental)](https://developer.spendesk.com/changelog/cost-center-analytical-splits-and-expense-categories-on-invoices-experimental.md) - [MCP: the AI assistant can now act in Spendesk](https://developer.spendesk.com/changelog/mcp-the-ai-assistant-can-now-act-in-spendesk.md) - [The documentation is now searchable and readable by AI assistants](https://developer.spendesk.com/changelog/the-documentation-is-now-searchable-and-readable-by-ai-assistants.md) - [A new Postman collection for the whole API](https://developer.spendesk.com/changelog/a-new-postman-collection-for-the-whole-api.md) - [Recipes for finance teams](https://developer.spendesk.com/changelog/recipes-for-finance-teams.md) - [Spendesk MCP server for AI assistants](https://developer.spendesk.com/changelog/spendesk-mcp-server-for-ai-assistants.md) - [Organisation-level access for multi-entity customers (experimental)](https://developer.spendesk.com/changelog/organisation-level-access-for-multi-entity-customers-experimental.md)