Skip to main content

Problem types

Errors are returned as RFC 9457 application/problem+json documents, never inside a 2xx body. The type member is a URI under https://api.spendone.tech/problems/ that identifies the problem; branch on it, never on the title or detail wording, which changes freely.

This page is generated from the API source at every documentation deploy: every type below is one the server can emit, and a type added to the source appears here with the next deploy. The full URI of a type is the base above plus its slug, and it dereferences: fetch it and the API returns that type's own documentation, as JSON for a client and as a page for a browser.

Extension fields​

Beyond the standard RFC 9457 members, a problem document carries these extensions.

FieldCarried byMeaning
request_idevery problemThe correlation id to quote to support.
operationevery problem raised through the service error handlerThe name of the failing operation.
errorsthe validation-error typeArray of {field, message} entries, one per failed field or row.
field, field_messagesingle-field 400sThe offending field and the reason it was rejected.
firewall_type, firewall_triggerthe firewall-blocked and firewall-rate-limited typesWhat the firewall blocked and which rule triggered it.

Platform​

TypeStatusTitleExtensionsReturned when
bad-request400Bad RequestThe request body or parameters are malformed and could not be processed.
conflict409ConflictThe request conflicts with the current state of the resource.
empty-tenant-id401Empty Tenant IDThe request carries an empty tenant identifier.
entity-locked409Entity LockedThis record is being modified by another operation. Try again.
forbidden403ForbiddenChanging roles, permissions, active state, or identity fields requires the user-management permission.
internal-error500Internal Server ErrorAn internal error occurred
invalid-tenant-id401Invalid Tenant IDThe request carries a tenant identifier that is not valid.
lock-conflict409Lock ConflictThis operation conflicted with another and was rolled back. Try again.
missing-tenant-id401Missing Tenant IDThe request is missing the tenant identifier.
not-found404Not FoundThe addressed resource does not exist (or is masked as absent for this caller).
read-only-transaction500Internal Server ErrorAn internal error occurred
request-timeout503Request TimeoutThis request took too long to complete. Try again.
statement-timeout503Statement TimeoutThis request took too long to complete. Try again.
unauthorized401UnauthorizedThe request lacks valid authentication credentials.
unprocessable-entity422Unprocessable EntityThe request is well-formed but semantically invalid for the target resource.
validation-error400Validation ErrorerrorsA request field failed validation; the errors extension lists each field and reason.
  • forbidden is raised by more than one module: platform, users.

Firewall​

TypeStatusTitleExtensionsReturned when
firewall-blocked403Request blocked by firewallfirewall_trigger, firewall_typeFirewall blocked this request.
firewall-rate-limited429Request blocked by firewallfirewall_trigger, firewall_typeFirewall blocked this request.

Invoices​

TypeStatusTitleExtensionsReturned when
accountant-verification-step-invalid400Accountant Verification Step InvalidThe verification step must be formal_check or order_match.
accountant-verification-too-early409Accountant Verification Too EarlyThe invoice has not reached accounting yet.
allocation-coverage-mismatch422Allocation does not reconcile to the invoice totalThe per-purchase-order amounts must reconcile to the invoice total per bucket (charges, discounts, net, VAT).
allocation-duplicate-po422Purchase order allocated twiceEach purchase order may appear in at most one allocation.
allocation-empty422No allocationsAt least one allocation is required.
allocation-legal-entity-mismatch422Purchase orders from different legal entitiesEvery purchase order this invoice settles must belong to the same legal entity.
allocation-line-not-found422Unknown invoice lineThe submission references a line that is not part of this invoice; reload the editor.
allocation-lines-unassigned422Not every invoice line is assignedAssign every invoice line to exactly one of the selected purchase orders before submitting.
allocation-no-lines422Allocation without linesEach purchase order allocation needs at least one invoice line.
allocation-po-not-found422Purchase order not foundThe submission references a purchase order that does not exist or was deleted.
allocation-supplier-mismatch422Purchase order from a different supplierEvery purchase order this invoice settles must belong to the same supplier as the invoice.
allocation-supplier-missing422Invoice has no supplierSet the invoice's supplier before allocating it across purchase orders.
allocation-totals-pending422Invoice totals not extracted yetThe invoice has no document totals yet; allocation requires extracted totals.
booking-proposal-not-found404Booking-Proposal Not FoundBooking-Proposal was not found
booking-tax-code-unmapped400Booking Tax Code UnmappedA booking line's VAT rate and category have no tax code configured for the target FI system.
booking-total-exceeds-invoice-total400Booking Total Exceeds Invoice TotalThe booking lines total more than the invoice total.
document-adjustment-index-out-of-range400Document Adjustment Index Out Of RangeThe invoice has no document-level charge or allowance at the requested index. Refresh the invoice and try again.
invalid-workflow-transition400Invalid Workflow TransitionThe requested action cannot be executed from the invoice's current workflow status.
invoice-access-forbidden403Forbidden
invoice-already-sent-to-accounting409Invoice Already Sent To AccountingThe invoice was already sent to accounting and can no longer be amended.
invoice-buyer-not-found404Invoice-Buyer Not FoundInvoice-Buyer was not found
invoice-correction-invalid-amount400Invalid Amount Formatinvalid amount format
invoice-correction-invalid-date400Invalid Date Formatinvalid date format
invoice-currency-invalid400Invalid Invoice CurrencyThe currency must be a three-letter ISO 4217 code, such as EUR or USD.
invoice-currency-missing409Invoice Currency MissingThe invoice has no currency. Set the invoice currency before transferring the invoice to the FI tool.
invoice-duplicate-file409Duplicate Invoice Fileexisting_invoice_code, existing_invoice_number, existing_purchase_order_code, existing_workflow_statusAn invoice with an identical file already exists.
invoice-duplicate-park-not-allowed409Invoice Cannot Be Parked As A DuplicateThis invoice has already progressed into accounting, so it cannot be marked as a duplicate. An accountant can reject it back to the buyer, who can then park or delete it.
invoice-gross-missing409Invoice Amount MissingThe invoice has no total amount. Enter the invoice amount before continuing.
invoice-hand-over-invalid-state409Invoice cannot be handed overThis invoice changed status since it was loaded and can no longer be handed over to accounting. Please refresh and try again.
invoice-has-collective-allocation409Invoice settles several purchase ordersThis invoice is allocated across several purchase orders; edit the allocation there instead of reassigning a single one.
invoice-key-changed-during-handover409Invoice Changed During Hand-OverThe invoice's stated total or issue date changed while the hand-over was starting. Retry it.
invoice-line-index-out-of-range400Invoice Line Index Out Of RangeThe invoice has no line at the requested index. Refresh the invoice and try again.
invoice-line-part-of-allocation409Invoice Line Part Of AllocationThis line belongs to a collective invoice's allocation and cannot be deleted directly. Adjust the allocation instead.
invoice-parked-as-duplicate409Invoice Parked As DuplicateThis invoice is parked as a duplicate and can no longer be advanced. Work on the invoice it duplicates instead.
invoice-po-not-reassignable409Conflict
invoice-recipient-mismatch-unacknowledged422Invoice Recipient Does Not Match The Legal Entitymismatched_fieldsThis invoice is addressed to a different legal entity than the purchase; correct it or supply an override to advance it.
invoice-seller-not-found404Invoice-Seller Not FoundInvoice-Seller was not found
invoice-tax-validation-incomplete422Tax Validation Incompletemissing_fieldsThis invoice is missing mandatory §14 UStG fields; supply an override to advance it.
invoice-unsupported-file400Unsupported Invoice FileThe uploaded file must be a PDF, an image (PNG, JPEG, TIFF, WebP) or an e-invoice XML.
invoice-upload-unauthorized401UnauthorizedA resolvable user identity is required to upload invoices.
invoice-vat-breakdown-not-single-rate422Invoice VAT Breakdown Is Not Single RateThis invoice states more than one VAT rate, so it has no single document rate to correct. Correct the rate on the line items instead.
matching-result-not-found404Matching-Result Not FoundMatching-Result was not found
purchase-order-canceled409Purchase order is canceledThis purchase order has been canceled and can no longer be linked to an invoice. Pick another order, or reopen this one first if the document credits an invoice already booked against it.
purchase-order-completed409Purchase order is completedThis purchase order is completed and can no longer take a new invoice. Pick another order, or reopen this one first if the document credits an invoice already booked against it.
purchase-order-not-accepting-invoices409Purchase Order Not Accepting Invoicesallowed_statesThe purchase order is not in a status that accepts an invoice upload.
reconciliation-comment-required422Reconciliation Comment Requiredmissing_comment_fieldsA low match needs the buyer's explanation before the invoice moves on.
reject-intent-invalid422Reject Intent InvalidThe rejection intent must be replace or correct when given.
reject-not-allowed-from-status409Reject Not Allowed From Current StatusThe invoice cannot be rejected back to the buyer from its current workflow status.
reject-reason-required422Reject Reason RequiredA non-empty reason is required to reject an invoice back to the buyer.
resume-requires-purchase-order409Resume Requires A Purchase OrderThis rejected invoice has no purchase order, so it cannot be resumed. An accountant assigns one first.
workflow-step-mismatch409Workflow Step Mismatchcurrent_status, expected_statusThis step can only be confirmed while the invoice is in that step; it has already moved on.

Purchase orders​

TypeStatusTitleExtensionsReturned when
invalid-delivery-line400Invalid Delivery LineEach delivery line's line_item_id must belong to the purchase order's purchase request, and its quantity must not exceed that line's ordered quantity.
invalid-inquiry-sub-type400Invalid Inquiry Sub-TypeThe inquiry sub_type must be one of invoice_missing, invoice_verification, po_matching, or delivery.
purchase-order-access-forbidden403Purchase order access forbiddenYou are not authorized to perform this action on the purchase order.
purchase-order-card-cancel-forbidden403Purchase order cancellation reserved to accountingOnly accounting can cancel this purchase order, or resolve its dispute as not delivered, because an active credit card exists for it. Please ask accounting to take over the dispute.
purchase-order-card-confirmation-required422Card confirmation requiredPlease confirm that the credit card for this order was not used before canceling it.
purchase-order-credit-card-required409Credit card requiredGenerate the credit card for this purchase order before placing the order.
purchase-order-invalid-transition409Invalid purchase order transitionThis action is not allowed in the purchase order's current status. Please refresh and try again.
purchase-order-invoice-not-cancellable409Purchase order cannot be canceledThis purchase order can't be canceled because one of its invoices is already being exported to your accounting system.
purchase-order-stale-status409Purchase order status changedThis purchase order changed status since it was loaded. Please refresh and try again.

Purchase requests​

TypeStatusTitleExtensionsReturned when
approval-no-approvers-assignable409No approver could be assignedThe approval rules matched but named no approver that could be resolved.
approval-plan-already-live409Approval already in progressThis purchase request already has an approval in progress, so it was left unchanged. Refresh it and try again.
blocked-supplier422Supplier not permitted by company policyblock_reason_key, block_reason_url, supplier_code, supplier_name
blocked-supplier-help-not-allowed422Procurement help not availableProcurement help can only be requested for a blocked supplier.
cost-center-split-invalid400Invalid Cost Center SplitCost center splits must use unique cost centers and percentages summing to 100.00.
cost_center-not-found404Cost_center Not FoundCost_center was not found
document-not-readable400Document not readableNo text could be read out of the document.
pay-on-invoice-not-permitted403Paying on invoice not permittedYou are not allowed to pay on invoice.
procurement-contacts-unavailable409Procurement contacts unavailableNo procurement contact is currently configured.
purchase-flow-not-eligible403Purchase flow not availableYou are not eligible for this purchase flow.
purchase-list-view-unsupported-sort400Unsupported sort parametersort_by or order is not one of the supported values.
purchase-on-behalf-not-permitted403Purchasing on behalf not permittedYou are not allowed to purchase on behalf of other users.
purchase-request-access-forbidden403Purchase request access forbiddenYou are not authorized to modify this purchase request.
purchase-request-malformed-code400Malformed Purchase-Request CodeThe code is not in a valid format
purchase-request-not-in-draft409Purchase request not editableThe purchase request can only be updated while in DRAFT status.
purchase_request-not-found404Purchase_request Not FoundPurchase_request was not found
quote-document-too-large413Payload Too LargeThe document exceeds the size limit for a quote read.
self-approval-no-approver409No other approver availableThis tenant does not allow buyers to approve their own requests, and nobody else could approve this one. An administrator has to add an approval rule for this case or make sure the tenant has an active administrator.
supplier-not-found404Supplier Not FoundSupplier was not found
unsupported-document-type400Unsupported document typeThe document has to be a PDF, an accepted image format, or e-invoice XML.
  • cost_center-not-found is raised by more than one module: purchase_requests, subscriptions.
  • purchase_request-not-found is raised by more than one module: purchase_requests, subscriptions.
  • supplier-not-found is raised by more than one module: purchase_requests, suppliers.

Approvals​

TypeStatusTitleExtensionsReturned when
approval-malformed-code400Malformed Approval CodeThe code is not in a valid format
approval-task-conflict409Approval Task ConflictThe approval task has already been completed
approval-task-tag-required409Approval Task Has No TagOnly a task assigned to a tag (expert group) can be assigned to a user
cannot-assign-own-approval409Cannot Assign Own ApprovalThis approval cannot be assigned to the requester or buyer of the purchase; a second person must approve it (four-eyes principle).
purchase-request-stale-status409Purchase request status changedThis purchase request changed status since it was loaded. Please refresh and try again.
self-approval-not-permitted403Self Approval Not PermittedYou cannot approve your own purchase request
task-not-found404Task Not FoundTask was not found
  • purchase-request-stale-status is raised by more than one module: approvals, purchase_requests, subscriptions.

Accounting and exports​

TypeStatusTitleExtensionsReturned when
accounting-malformed-code400Malformed Accounting CodeThe code is not in a valid format
datev-config-incomplete422DATEV Configuration Incompletecode, missingThe DATEV configuration for this tenant is incomplete for the selected export mode.
datev-not-found404Datev Not FoundDatev was not found
equivalent-invoice-already-transferred409Equivalent Invoice Already Transferredexisting_invoice_code, existing_purchase_order_codeAn invoice with the same document number has already been transferred to the FI tool.
export-config-not-found404Export-Config Not FoundExport-Config was not found
export-formatter-invalid400Invalid Formatter ConfigurationThe field formatter configuration is invalid
export-job-not-found404Export-Job Not FoundExport-Job was not found
export-job-required400Export Job Requiredjob_code is required
export-lookup-invalid400Invalid Lookup ConfigurationThe lookup table or rule configuration is invalid
export-lookup-rule-not-found404Export-Lookup-Rule Not FoundExport-Lookup-Rule was not found
export-lookup-rule-priority-exists409Export-Lookup-Rule Priority Already ExistsA export-lookup-rule with this priority already exists
export-lookup-table-not-found404Export-Lookup-Table Not FoundExport-Lookup-Table was not found
export-profile-field-not-found404Export-Profile-Field Not FoundExport-Profile-Field was not found
export-profile-not-found404Export-Profile Not FoundExport-Profile was not found
export-profile-type-invalid400Invalid Profile TypeThe profile_type is not one of the CSV profile types this endpoint supports
export-profiles-not-configured409FI Export Not ConfiguredFI export is not configured. Ask an admin to set up at least one active export profile before sending.
export-target-not-found404Export-Target Not FoundExport-Target was not found
export-target-not-s3422Target Is Not An S3 TargetThe export target does not have S3 configured
export-target-not-sftp422Target Is Not An SFTP TargetThe export target does not have SFTP configured
export-tasks-not-stampable409Selected Tasks Already ExportingOne or more selected tasks belong to an export that is still running, or no longer exist. Reload the queue and select again.
invoice-not-found404Invoice Not FoundInvoice was not found
journal-entry-malformed-code400Malformed Journal-Entry CodeThe code is not in a valid format
no-invoices-to-export409No Invoices To ExportNone of the selected invoices is eligible for export.
no-purchase-order-invoices-found409No Purchase Order Invoices FoundThe selected purchase orders carry no invoice ready for export.
purchase-order-invoices-parked409Purchase Order Invoices Parked As DuplicatesEvery invoice on the selected purchase orders is parked as a duplicate, so there is nothing to forward. Work on the invoices they duplicate instead.
s3-connection-failed503S3 Connection Failederror_codeThe S3 connection test failed.
sap-export-not-found404SAP Export Not FoundThe requested SAP export job was not found
sftp-connection-failed503SFTP Connection Failederror_codeThe SFTP connection test failed. Check the host, port, credentials and remote path.
  • equivalent-invoice-already-transferred is raised by more than one module: accounting, invoices.
  • export-job-not-found is raised by more than one module: accounting, transaction_events.
  • invoice-not-found is raised by more than one module: accounting, invoices.

Credit cards​

TypeStatusTitleExtensionsReturned when
active-card-changed409Active card changedThe active credit card for this purchase order changed; resolve the current card and retry.
card-billing-account-not-configured409Card billing account not configuredThe legal entity has no card provider account for this kind of purchase. An administrator must set it on the legal entity before a card can be issued.
card-data-proxy-failed502Card data proxy failedThe Payrails proxy did not forward the request, so Mastercard never received it.
card-provider-not-configured503Card provider not configuredThis environment has no Mastercard credentials configured, so the request cannot be served.
card-provider-request-invalid400Card provider rejected the requestMastercard rejected the request as invalid. Correct the named field and retry.
card-provider-resource-not-found404Card provider resource not foundThe referenced entity or card does not exist at Mastercard.
card-provider-rule-violation409Card provider refused the requestMastercard understood the request but refused it in the current state of the account.
card-provider-unavailable503Card provider unavailableThe card provider appears to be unreachable and may be down. Please try again later.
credit-card-access-forbidden403Credit card access forbiddenYou are not authorized to access this credit card.
credit-card-malformed-code400Malformed Credit-Card CodeThe code is not in a valid format
credit-card-not-found404Credit-Card Not FoundCredit-Card was not found
credit-card-not-revealable409Credit card not revealableThis card is no longer active, so its details can no longer be shown.
mastercard-orphaned-card409Mastercard card exists without a SpendOne recordA virtual card for this purchase order already exists at Mastercard and was never recorded here. Resolve it before issuing again.
mastercard-real-card-not-registered409No Mastercard real card registeredThis legal entity is set to issue Mastercard cards but has no registered real card.
purchase-order-malformed-code400Malformed Purchase-Order CodeThe code is not in a valid format
purchase-order-not-eligible409Purchase order not eligibleThe purchase order is not in a state that allows credit card issuance.
real-card-already-registered409Real card already registeredThis legal entity already has a different real card registered.
real-card-duplicate-number409Real card already registered at the providerMastercard has this card number registered already. Reconcile the existing registration before retrying.
real-card-last-four-taken409Real card last 4 already in useAnother legal entity of this tenant already holds a real card ending in the same four digits.
statement-not-found404Statement Not FoundStatement was not found
  • active-card-changed is raised by more than one module: credit_cards, subscriptions.
  • card-billing-account-not-configured is raised by more than one module: credit_cards, subscriptions.
  • credit-card-not-found is raised by more than one module: credit_cards, subscriptions.
  • purchase-order-malformed-code is raised by more than one module: credit_cards, purchase_orders.

Users and identity​

TypeStatusTitleExtensionsReturned when
organizational-unit-code-exists409Organizational-Unit Code Already ExistsA organizational-unit with this code already exists
organizational-unit-malformed-code400Malformed Organizational-Unit CodeThe code is not in a valid format
organizational-unit-member-not-found404Organizational-Unit-Member Not FoundOrganizational-Unit-Member was not found
organizational-unit-not-found404Organizational-Unit Not FoundOrganizational-Unit was not found
permission-set-not-assignable409Permission Set Not AssignableThe permission set was deleted or deactivated and can no longer be assigned.
user-already-onboarded409User Already OnboardedThis user has already completed onboarding and cannot receive a new invitation email.
user-email-exists409User Email Already ExistsA user with this email already exists
user-malformed-code400Malformed User CodeThe code is not in a valid format
user-must-have-role400User Must Have A RoleA user must keep at least one role, granted directly or via a permission set.
user-zitadel-id-already-set409User Already LinkedThis user is already linked to a Zitadel account.

Accountant tasks​

TypeStatusTitleExtensionsReturned when
accountant-task-malformed-code400Malformed Accountant-Task CodeThe code is not in a valid format
accountant-verification-missing409Accountant Verification MissingAn accountant must confirm the formal check and the order match before the invoice can be transferred to the FI tool.
accountant_task-not-found404Accountant_task Not FoundAccountant_task was not found
assign-to-others-not-permitted403Assigning To Others Not PermittedAssigning a task to another user requires the assign-to-others permission; you can still assign it to yourself.
assignee-out-of-entity-scope422Assignee Out Of Entity ScopeThe selected assignee's org units do not reach this task's legal entity; choose an assignee who works in that entity.
cannot-assign-own-purchase409Cannot Assign Own PurchaseThis task cannot be assigned to the requester or buyer of the purchase; a second person must do the booking (four-eyes principle).
cannot-process-own-purchase403Cannot Process Own PurchaseYou cannot complete the accounting steps for your own purchase; a second person must do the booking (four-eyes principle).
fi-transfer-owned-by-export409FI Transfer Owned By The ExportThe FI export closes this task itself once it has delivered the invoice; complete it by running the export.
invalid-resolution-reason400Bad Requestresolution_reason must be one of: resolved_externally, not_an_invoice, duplicate.
invalid-task-status-transition409Invalid Task Status TransitionThe task cannot be transitioned from its current status; canceled or completed tasks are terminal.
invoice-not-ready-for-fi-transfer409Invoice Not Ready For FI TransferThe invoice is not in the workflow status required for this FI transfer. Refresh and try again.
lifecycle-task-not-retirable409Lifecycle Task Not RetirableThis task follows its invoice through the accounting workflow and cannot be canceled or deleted on its own; move the invoice instead.
purchase-order-not-found404Purchase-Order Not FoundPurchase-Order was not found
task-held-by-another-user409Task Held By Another UserThis task is assigned to another user; assign it to yourself before completing it.
  • accountant-verification-missing is raised by more than one module: accountant_tasks, invoices.
  • cannot-process-own-purchase is raised by more than one module: accountant_tasks, invoices.
  • invoice-not-ready-for-fi-transfer is raised by more than one module: accountant_tasks, invoices.
  • purchase-order-not-found is raised by more than one module: accountant_tasks, credit_cards, invoices.

Admin processes​

TypeStatusTitleExtensionsReturned when
process-not-reassignable409Process No Longer Open For ReassignmentOne of the selected processes was closed, decided or canceled before the reassignment ran. Reload the overview and select again.
process-target-on-requesting-side409Target Cannot Do Their Own WorkThe selected user is the buyer or requester behind one of the approvals or accountant tasks in this batch and could never act on it. Pick a different user.
user-not-found404User Not FoundUser was not found
  • user-not-found is raised by more than one module: admin_processes, purchase_requests, user_inbound_addresses, users, vacation_substitutions.

Audit Log​

TypeStatusTitleExtensionsReturned when
audit-log-malformed-code400Malformed Audit-Log CodeThe code is not in a valid format
audit-log-not-found404Audit-Log Not FoundAudit-Log was not found

Auth​

TypeStatusTitleExtensionsReturned when
pool-exhausted503Service BusyThe service is at capacity. Try again.
  • pool-exhausted is raised by more than one module: auth, platform.

Authorization​

TypeStatusTitleExtensionsReturned when
permission-malformed-code400Malformed Permission CodeThe code is not in a valid format
permission-set-has-users409Permission Set Has Assigned UsersPermission set cannot be deleted while users are assigned
permission-set-inactive409Permission Set InactiveOperation not allowed on inactive permission set
permission-set-malformed-code400Malformed Permission-Set CodeThe code is not in a valid format
permission-set-unknown-permission400Unknown PermissionThe permission set names a permission that does not exist
permission_set-not-found404Permission_set Not FoundPermission_set was not found

Branding​

TypeStatusTitleExtensionsReturned when
branding-branding-exists409Branding Branding Already ExistsA branding with this branding already exists
branding-invalid-color400Bad RequestInvalid color value
branding-invalid-dimensions400Bad RequestUploaded image dimensions exceed the limit
branding-invalid-file-type400Bad RequestUnsupported upload content type
branding-invalid-font400Bad RequestInvalid font family
branding-invalid-radius400Bad RequestInvalid corner radius
branding-missing-file400Bad RequestMissing upload file
branding-not-found404Branding Not FoundBranding was not found
upload-too-large413Payload Too LargeUploaded file exceeds the size limit

Chart of accounts​

TypeStatusTitleExtensionsReturned when
chart-of-accounts-code-exists409Account Code Already ExistsAnother account already uses that code
chart-of-accounts-custom-not-enabled409Custom Chart Of Accounts Not EnabledThis legal entity has not enabled a custom chart of accounts; enable it first via the legal-entities endpoint
chart-of-accounts-import-missing-file400Missing Upload FileThe multipart request is missing the required "file" form field
chart-of-accounts-import-too-large413Upload Too LargeThe uploaded file exceeds the maximum allowed size
chart-of-accounts-invalid-code400Invalid Account CodeThe account code must be 4-18 alphanumeric characters
chart-of-accounts-invalid-name400Invalid Account NameThe account name must not be empty
chart-of-accounts-legal-entity-not-found404Legal Entity Not FoundNo legal entity exists with the given legal_entity_code
chart-of-accounts-malformed-code400Malformed Chart-Of-Accounts CodeThe code is not in a valid format
chart-of-accounts-not-found404Account Not FoundNo account exists with the given code
chart-of-accounts-referenced409Account In UseThe account is still referenced by a supplier or a posted journal entry; deactivate it instead of deleting or recoding it

Config​

TypeStatusTitleExtensionsReturned when
config-malformed-code400Malformed Config CodeThe code is not in a valid format
config-not-found404Config Not FoundConfig was not found
config-setting-exists409Config Setting Already ExistsA config with this setting already exists
custom-field-not-found404Custom-Field Not FoundCustom-Field was not found

Cost centers​

TypeStatusTitleExtensionsReturned when
cost-center-code-exists409Cost-Center Code Already ExistsA cost-center with this code already exists
cost-center-malformed-code400Malformed Cost-Center CodeThe code is not in a valid format
cost-center-not-found404Cost-Center Not FoundCost-Center was not found
  • cost-center-not-found is raised by more than one module: cost_centers, users.

Credit Card Limit Increases​

TypeStatusTitleExtensionsReturned when
credit-card-limit-increase-not-found404Credit-Card-Limit-Increase Not FoundCredit-Card-Limit-Increase was not found

Data import​

TypeStatusTitleExtensionsReturned when
access-key-not-found404Access-Key Not FoundAccess-Key was not found
data-import-malformed-code400Malformed Data-Import CodeThe code is not in a valid format
dataimport-upload-too-large413Upload Too Largeuploaded file exceeds the maximum allowed size of … bytes
import-job-not-found404Import-Job Not FoundImport-Job was not found
import-kind-not-found404Import-Kind Not FoundImport-Kind was not found

FI tax mapping​

TypeStatusTitleExtensionsReturned when
fi-tax-mapping-conflict409Tax Mapping Already ExistsA tax mapping for this combination of FI system, VAT rate, VAT category, and seller region already exists
fi-tax-mapping-invalid-category400Invalid VAT Category CodeThe vat_category_code field must not be blank
fi-tax-mapping-invalid-fi-system400Invalid FI SystemThe target_fi_system field is not a recognized financial integration system; accepted values: DATEV, SAP
fi-tax-mapping-invalid-rate400Invalid VAT RateThe vat_rate field is required, must be between 0 and 100, and must carry at most 3 decimal places
fi-tax-mapping-invalid-seller-region400Invalid Seller RegionThe seller_region field must be EU, NON_EU, or blank for suppliers from anywhere
fi-tax-mapping-invalid-target-code400Invalid Target Tax CodeThe target_tax_code field must not be blank
fi-tax-mapping-label-too-long400Tax Mapping Label Too LongThe label field must be at most 100 characters
fi-tax-mapping-legal-entity-not-found404Legal Entity Not FoundNo legal entity exists with the given legal_entity_code
fi-tax-mapping-not-found404Tax Mapping Not FoundNo tax mapping exists with the given id

Global Config​

TypeStatusTitleExtensionsReturned when
global-config-malformed-code400Malformed Global-Config CodeThe code is not in a valid format

Groups​

TypeStatusTitleExtensionsReturned when
group-invalid-kind400Invalid Group KindOnly static and dynamic groups can be managed
group-malformed-code400Malformed Group CodeThe code is not in a valid format
group-not-found404Group Not FoundGroup was not found
group-system-read-only409System Group Is Read-OnlySystem-derived groups (role, ou) cannot be modified

Inbound emails​

TypeStatusTitleExtensionsReturned when
attachment-not-found404Attachment Not FoundAttachment was not found
inbound-attachment-already-matched409Attachment Already Matchedpurchase_order_code
inbound-attachment-attachment-id-required400Bad Request
inbound-attachment-delete-forbidden403Forbidden
inbound-attachment-invalid-document-intent400Bad Request
inbound-attachment-invalid-id400Bad Request
inbound-attachment-malformed-code400Malformed Inbound-Attachment CodeThe code is not in a valid format
inbound-attachment-not-parked409Attachment Not Parked
inbound-attachment-owner-mismatch403Forbidden
inbound-attachment-purchase-order-code-required400Bad Request
inbound-attachment-restore-forbidden403Forbidden
purchase_order-not-found404Purchase_order Not FoundPurchase_order was not found
  • purchase_order-not-found is raised by more than one module: inbound_emails, purchase_orders.

Inbox​

TypeStatusTitleExtensionsReturned when
notification-id-invalid400Invalid Notification IDThe notification id is not a well-formed id.
notification-not-found404Notification Not FoundNotification was not found
TypeStatusTitleExtensionsReturned when
card-vault-not-configured503Card Vault Not ConfiguredNo Payrails card vault is configured, so a real card cannot be tokenized
instrument-has-no-card-number422Instrument Has No Card NumberThe tokenized instrument carries no card number field
legal-entity-malformed-code400Malformed Legal-Entity CodeThe code is not in a valid format
legal-entity-not-found404Legal Entity Not FoundNo legal entity exists with the given code
unreadable-tokenized-card422Unreadable Tokenized CardThe vault's masked card number or expiry could not be read
  • legal-entity-not-found is raised by more than one module: legal_entities, users.

MCP access​

TypeStatusTitleExtensionsReturned when
mcp-access-not-configured503MCP Access Not ConfiguredThis environment has no MCP server to enable
mcp-access-not-entitled403MCP Access Not EntitledThe MCP server is not part of this tenant's contract

Notification Configs​

TypeStatusTitleExtensionsReturned when
notification-config-not-found404Notification Config Not FoundNo notification config exists for that notification type
notification-scope-settings-not-found404Notification Scope Settings Not FoundNo notification scope settings exist for that scope

Notification digests​

TypeStatusTitleExtensionsReturned when
digest-code-exists409Digest Code Already ExistsA digest with this code already exists
digest-disabled409Digest Is Switched OffThis digest is switched off and does not batch anything, so it takes no personal settings
digest-invalid-fire-time400Invalid Digest Send TimeThe digest send time must be a valid HH:MM time
digest-name-required400Digest Name RequiredThe digest needs a name
digest-not-found404Digest Not FoundDigest was not found
digest-not-user-configurable403Digest Is Admin-ManagedThis digest is managed by an administrator and cannot be changed per user
digest-type-already-assigned409Notification Type Already In A DigestA selected notification type already belongs to another digest
digest-type-not-emailable400Notification Type Cannot Be EmailedA selected notification type has no email template and cannot be digested
digest-types-required400Digest Needs Notification TypesA digest must bundle at least one notification type
digest-user-code-required400User Code RequiredA personal digest setting needs the user it belongs to
digest-user-not-found404Digest-User Not FoundDigest-User was not found
digest-user-setting-not-found404Digest-User-Setting Not FoundDigest-User-Setting was not found
notification-digest-malformed-code400Malformed Notification-Digest CodeThe code is not in a valid format

Payment methods​

TypeStatusTitleExtensionsReturned when
payment-method-malformed-code400Malformed Payment-Method CodeThe code is not in a valid format
payment_method-not-found404Payment_method Not FoundPayment_method was not found

Personal access tokens​

TypeStatusTitleExtensionsReturned when
api-token-expiry-in-past400Token Expiry In The Pastexpires_at must be in the future
personal-access-token-limit-reached409Personal Access Token Limit ReachedA user may hold at most … active personal access tokens
personal-access-token-not-found404Personal-Access-Token Not FoundPersonal-Access-Token was not found

Product scraper​

TypeStatusTitleExtensionsReturned when
product-scrape-auth-required422Authentication Requiredcode, retry_count, urlThe target site requires authentication and could not be scraped
product-scrape-failed422Scrape Failedcode, urlThe page could not be scraped
product-scrape-no-content422No Scrapable Contentcode, urlThe page loaded but contained no scrapable product data
product-scrape-timeout504Scrape Timeoutcode, elapsed_ms, urlThe target site took too long to respond
product-scrape-unsupported-language422Unsupported Languagecode, detected_language, urlThe page's detected language is not supported
product-scrape-url-blocked400URL Not Allowedcode, reason, urlThe requested URL is not permitted (scheme, userinfo, or address range)

Products​

TypeStatusTitleExtensionsReturned when
[product category-not-found](https://api.spendone.tech/problems/product category-not-found)404Product Category Not FoundProduct Category was not found
product-category-malformed-code400Malformed Product-Category CodeThe code is not in a valid format
product-category-protected409Product Category ProtectedThis built-in product category cannot be deactivated or deleted.
product-malformed-code400Malformed Product CodeThe code is not in a valid format
product-not-found404Product Not FoundProduct was not found
product_categories-code-exists409Product_categories Code Already ExistsA product_categories with this code already exists
products-code-exists409Products Code Already ExistsA products with this code already exists
products-name-exists409Products Name Already ExistsA products with this name already exists

Punchout​

TypeStatusTitleExtensionsReturned when
punchout-ariba-setting-invalid422Punchout Ariba Setting Invalidexpected, field, valueA connection declared platform=ariba carries a setting SAP Business Network cannot work with, or omits one the onboarding must decide.
punchout-connection-code-exists409Punchout-Connection Code Already ExistsA punchout-connection with this code already exists
punchout-connection-inactive409Punchout Connection InactiveThe connection is inactive
punchout-connection-not-found404Punchout-Connection Not FoundPunchout-Connection was not found
punchout-credential-not-found404Punchout-Credential Not FoundPunchout-Credential was not found
punchout-credential-secret-exists409Punchout-Credential Secret Already ExistsA punchout-credential with this secret already exists
punchout-credential-tenant-mismatch401Punchout Credential Tenant MismatchCredential tenant mismatch
punchout-delivery-url-invalid400Punchout Delivery URL InvalidThe delivery URL is not an allowed endpoint
punchout-document-not-failed409Punchout Document Not FailedOnly a failed document can be reprocessed
punchout-document-not-found404Punchout-Document Not FoundPunchout-Document was not found
punchout-document-not-redeliverable409Punchout Document Not RedeliverableOnly a delivery-failed or held outbound document can be redelivered
punchout-document-payload-exists409Punchout-Document Payload Already ExistsA punchout-document with this payload already exists
punchout-encryption-key-unavailable409Punchout Encryption Key UnavailableNo usable PUNCHOUT_ENCRYPTION_KEY is configured, so the stored outbound secret cannot be resolved
punchout-identity-mismatch401Punchout Identity MismatchBuyer identity mismatch
punchout-imported-secret-invalid400Punchout Imported Secret InvalidThe imported shared secret was not accepted
punchout-legal-entity-not-bookable422Punchout Legal Entity Not Bookablefield, legal_entity_codeThe connection's legal_entity_code names no legal entity that can be booked against.
punchout-malformed-code400Malformed Punchout CodeThe code is not in a valid format
punchout-order-contact-not-ownable422Punchout Order Contact Not OwnableThe order's contact names no active user holding a cost center
punchout-outbound-not-configured409Punchout Outbound Not ConfiguredThe connection has no outbound delivery configuration
punchout-outbound-secret-invalid400Punchout Outbound Secret InvalidThe outbound shared secret was not accepted

Purchase Flows​

TypeStatusTitleExtensionsReturned when
purchase-flow-malformed-code400Malformed Purchase-Flow CodeThe code is not in a valid format
purchase-flow-not-found404Purchase-Flow Not FoundPurchase-Flow was not found

Push​

TypeStatusTitleExtensionsReturned when
device-registration-invalid400Invalid Device RegistrationThe device token is missing or too long, or the platform is not one of ios, android, web.

Recommendations​

TypeStatusTitleExtensionsReturned when
service-unavailable503Service UnavailableTemporary upstream service unavailable

Approval rules​

TypeStatusTitleExtensionsReturned when
invalid-rule-type400Invalid Rule Type
rule-in-use409Rule In Useused_by_flowsThis rule is referenced by one or more active purchase flows and cannot be deactivated or deleted
rule-malformed-code400Malformed Rule CodeThe code is not in a valid format
rule-not-found404Rule Not FoundRule was not found

SCIM​

TypeStatusTitleExtensionsReturned when
[scim token-not-found](https://api.spendone.tech/problems/scim token-not-found)404Scim Token Not FoundScim Token was not found

Subscriptions​

TypeStatusTitleExtensionsReturned when
cost-center-split-duplicate400Duplicate Cost Center In SplitEach cost center may appear at most once in the split.
cost-center-split-sum-invalid400Cost-Center Split Must Sum To 100%The cost-center allocation must sum to exactly 100%.
early-replacement-no-headroom409No Remaining Card LimitThe card being replaced is fully spent, so there is no limit to carry over. Request a limit increase instead.
early-replacement-reason-required400Replacement Reason RequiredThis card is not yet close to expiry. Replacing it early requires a reason.
early-replacement-reason-too-long400Replacement Reason Too LongThe replacement reason exceeds the maximum length of 500 characters.
follow-up-card-budget-exhausted409Follow-Up Card Budget ExhaustedThe remaining subscription budget is exhausted. Request a limit increase before generating a follow-up card.
follow-up-card-no-remaining-term409Subscription Term Fully CoveredThe subscription term is already fully covered by existing cards; no further follow-up card is needed.
subscription-malformed-code400Malformed Subscription CodeThe code is not in a valid format
subscription-not-found404Subscription Not FoundSubscription was not found

Suppliers​

TypeStatusTitleExtensionsReturned when
supplier-malformed-code400Malformed Supplier CodeThe code is not in a valid format

System banners​

TypeStatusTitleExtensionsReturned when
[system banner-not-found](https://api.spendone.tech/problems/system banner-not-found)404System Banner Not FoundSystem Banner was not found
system-banner-malformed-code400Malformed System-Banner CodeThe code is not in a valid format

Transaction events​

TypeStatusTitleExtensionsReturned when
export-job-in-progress409Export Job In Progressexport job is already in progress
transaction-event-malformed-code400Malformed Transaction-Event CodeThe code is not in a valid format

User inbound addresses​

TypeStatusTitleExtensionsReturned when
address-not-found404Address Not FoundAddress was not found
user-inbound-address-cannot-promote-disabled409Cannot make a disabled address the defaultRe-enable the address before making it the default.
user-inbound-address-invalid-localpart400Invalid LocalpartA localpart may contain only lowercase letters, digits, dots, hyphens and underscores.
user-inbound-address-primary-required409Cannot disable primary addressDisable a non-primary address; or add a new primary first which will demote this one to secondary.

Vacation substitutions​

TypeStatusTitleExtensionsReturned when
invalid-date-range400Invalid Date RangeEnd date must be on or after start date
self-substitution409Self SubstitutionUser cannot substitute for themselves
start-date-in-past400Start Date In PastStart date cannot be in the past
substitute-not-active400Substitute Not ActiveSubstitute user is not active
substitute-on-vacation409Substitute On VacationSubstitute user is also on vacation
vacation-access-forbidden403Vacation Access ForbiddenYou are not authorized to manage this vacation substitution.
vacation-already-exists409Vacation Already ExistsUser already has an active or scheduled vacation
vacation-not-cancellable409Vacation Not CancellableVacation cannot be canceled in its current status
vacation-not-scheduled409Vacation Not ScheduledVacation can only be updated when scheduled
vacation-status-conflict409Vacation Status ConflictThe vacation substitution changed state while the request was in flight; re-read it and retry.
vacation-substitution-malformed-code400Malformed Vacation-Substitution CodeThe code is not in a valid format
vacation_substitution-not-found404Vacation_substitution Not FoundVacation_substitution was not found