Monk follows up on overdue Acumatica invoices and keeps customer replies,
payment promises, and collection history together. Your team can see who has
promised to pay and which conversations need attention.You continue to issue invoices in Acumatica, and Monk refreshes from it every
hour. By default the connection is read-only. With
payment push switched on, a payment recorded in Monk is also
posted to Acumatica and applied to the invoice it pays.
A customer receives a reminder for one overdue invoice and replies with a
payment date. Monk records the promised date and pauses reminders based on
your team’s settings. A colleague can see the commitment alongside the
invoice without searching the inbox.Once your team records full payment in Acumatica, the next completed sync
marks the invoice as paid in Monk and stops reminders for it. If the customer
disputes the invoice, Monk pauses reminders and flags the conversation for
review.
Acumatica lets you configure dunning levels by customer class. If your team
also tracks payment promises and follow-up dates in inboxes or spreadsheets,
Monk keeps those commitments and customer replies alongside the relevant
invoices.
In Acumatica
In Monk
Creating, releasing, and correcting AR documents
Following up on overdue invoices, per customer or customer group
Recording payments, credit memos, and write-offs
Tracking payments and the remaining balance on each invoice
Maintaining customer accounts and contacts
Using those contacts for collection reminders
Credit limits, payment terms, and credit holds stay in Acumatica, along with
the general ledger, month-end close, and statutory reporting. Monk reports
aging and DSO for the invoices it imports.Reminders go to the contacts already on the Acumatica customer account: every
active contact with an email address, plus the account email when no contact
carries it. Recipients are reviewed with you during onboarding.
Acumatica 2025 R2 or later, Acumatica-hosted or self-hosted, reachable
over public HTTPS. Monk reads the Default endpoint at version 25.200.001,
which 2025 R2 and later builds publish. To check, open Web Service
Endpoints (SM207060) or https://<your-site>/entity and look for Default
at 25.200.001.
One tenant, one company, one branch per Monk org. The tenant is part of
the client ID. What Monk reads is decided by the dedicated user’s company and
branch access plus restriction groups in Acumatica; the Branch setting in
Monk does not narrow it. For a single-company pilot, restrict that user to the
pilot company and its approved branches before authorizing Monk. Confirm that
the user can select only that company in Acumatica. Records outside its access
are left out without an error, so if receivables sit across several companies
or branches, agree the setup with your Monk contact.
Single currency. Monk currently supports tenants that invoice in one
currency, matching your Monk organization’s currency. Multi-currency support
is planned. If your tenant invoices in multiple currencies, talk to your
Monk representative about your requirements.
Hourly refresh, plus on demand. Monk reads what changed since the last
run every hour, and Refresh now starts a run immediately. Reminders use
the balance from the latest refresh, so after posting a large batch of
payments, refresh before reminders go out.
History. The first refresh reads customers, contacts, credit memos,
payments, and applications in full, and invoices changed in the last 12
months. The import start date agreed during onboarding decides which of those
become invoices in Monk.
One API user licence slot. Monk signs in as a dedicated Acumatica user,
which holds one API user slot while connected.
Customer hierarchy. Monk reads the Parent Account on a customer and
links the child to its parent once both exist in Monk. Reminders go to each
customer’s own contacts, parent or child.
Setup is done together with Monk. Steps 1 and 2 use standard Acumatica
forms and need no customization project or installed component. Connecting,
the first sync, checking the imported invoices against Acumatica, and
switching on invoice import and follow-ups are done with a Monk engineer.
Agree the import start date and the refresh-token setting with your Monk
contact before you register the Connected Application.
Steps 1 and 2 are done by your Acumatica administrator; step 3 by a Monk user
who can manage integrations. Before you start, open Integrations → Acumatica
in Monk and copy the Redirect URI shown there; step 2 needs it.
1
Create a restricted role and dedicated user
Create a role on User Roles (SM201005), for example MONK-API-READ.
In Access Rights by Screen (SM201020), set each of the following actual
forms to View Only and leave every other form revoked:
Customers (AR303000), under Receivables
Invoices and Memos (AR301000), under Receivables
Payments and Applications (AR302000), under Receivables
Contacts (CR302000), under Marketing
Desired permission outcome: three Receivables forms set to View Only, everything else revoked. Contacts (CR302000) is set the same way under Marketing.
If you will use payment push, set Payments and
Applications (AR302000) to Delete instead of View Only. Monk creates,
releases, voids, and deletes the payments it pushes, and a View Only user
is refused. The user must also have access to the branch that pushed
payments post to.On Users (SM201010), create a dedicated user with only that role. For a
single-company pilot, use your Acumatica company/branch access and
restriction-group configuration to limit this user to the pilot company and
its approved branches. Sign in as this user and confirm the company picker
exposes only that company before you connect Monk. It signs in to a browser
once, during consent, so it must be a regular user rather than Acumatica’s
API-only user type. Check License Monitoring Console (SM604000) for a
free API user slot if other integrations already use the API. If the user
later loses access to one of these forms, refreshes stop at that read until
access is restored.
2
Register the Connected Application
On Connected Applications (SM303010):
Set Flow to Authorization Code.
On the Redirect URIs tab, paste the redirect URI copied from Monk.
On the Secrets tab, add a Shared Secret and copy it when it is
shown; Acumatica does not display it again.
Under Refresh Tokens, choose a mode other than No Refresh Tokens.
With sliding expiration the connection stays alive while Monk keeps
syncing, up to any absolute cap you set; with absolute expiration an
administrator re-authorizes on that schedule.
Save. Acumatica generates the client ID as <GUID>@<Tenant>, for
example 0A1B2C3D-4E5F-6789-ABCD-EF0123456789@LIVE, where the suffix is
the tenant you were signed in to. Monk needs the whole value. Your
Acumatica username is not the client ID.
Flow set to Authorization Code and one shared secret added. The redirect URI lives on the Redirect URIs tab next to Secrets.
3
Connect in Monk and approve access
In Integrations → Acumatica, enter the instance URL, the full client
ID, and the client secret, then click Save and authorize. The instance
URL is the site root only, for example https://erp.example.com/Instance or
https://yourcompany.acumatica.com. Do not enter a screen URL or an
identity URL such as https://yourcompany.acumatica.com/t/live/identity;
Acumatica’s Client Application Access page lists those identity
addresses, but Monk builds them from the site root.
Monk sends you to your instance: sign in as the dedicated user (sign out of
Acumatica first, or use a private window) and approve the two permissions,
Access to Web Services API and Offline Access.The authorization link expires after ten minutes and is bound to the Monk
user who started it. If it expires, click Authorize in Acumatica on the
Monk page to try again. If the user’s Acumatica role changes after Monk is
connected, click Reauthorize in Acumatica to issue a fresh grant; your
Acumatica settings and shared secret are unaffected.The Branch field under Instance settings does not limit what Monk
reads: the dedicated user’s branch access and restriction groups decide
that. If you set a branch, choose one the dedicated user can access;
otherwise reads fail with an error. Set the branch right after connecting,
before the first refresh. Once data has synced, the branch is fixed.
Each sync records the payments, credit memos, and write-offs applied to
invoices already in Monk. Their balances reflect those applications. When
Acumatica shows an invoice closed or with a zero balance, Monk marks it paid.
In Acumatica
In Monk
A payment covers part of an invoice
An allocation for the paid amount; the invoice stays open for the remainder
One payment is applied to several invoices
Each invoice gets its own allocation, read from the application records
A balance is written off with a separate write-off document
A non-cash settlement; the invoice closes without counting the amount as cash
A write-off amount is entered while applying a payment
The same non-cash settlement; only the cash portion counts as cash received
A released invoice is reversed with a credit memo (cancellation)
The invoice shows as paid by the credit memo and reminders stop
An invoice is on hold, on credit hold, or not yet released
Not imported; it appears once released
A payment is applied without the invoice record changing
Picked up anyway: applications are read on their own, not inferred from the invoice
A customer has a parent account
Linked to the parent once both exist in Monk; reminders still go to the customer’s contacts
A contact is inactive or has no email address
Not imported as a recipient
The API user loses access to one of the four forms
The refresh stops at that read; nothing partial reaches Monk until access is restored
Acumatica returns a truncated or malformed page
The refresh fails instead of importing an empty page
The instance publishes Default at a version other than 25.200.001
Talk to your Monk contact before connecting; the integration is validated against 25.200.001
A customer in Monk after a refresh: each Acumatica application arrives as a credit applied, a payment allocated, or an invoice paid.
Your Acumatica administrator registers a Connected Application
(SM303010) with the Authorization Code flow. Monk requests two scopes, shown
on the consent screen as Access to Web Services API and Offline
Access, and acts as the Acumatica user who approves them.
Monk stores your instance URL, tenant, client ID, shared secret, and the
access and refresh tokens encrypted at rest, and rotates refresh tokens
automatically.
The instance address is validated when you connect and each time Monk
requests a token: public HTTPS only, no private or internal hosts. Reads use
the validated address and never follow a redirect to another host.
If the grant is revoked or a token refresh is refused, the connection shows
Authorization needed with an Authorize in Acumatica button. To be
emailed when that happens, turn on Integration reconnect required under
Settings → Notifications in Monk and add recipients.
To revoke access at the source, open the Connected Application in
Acumatica and click Revoke Access, which removes the tokens Monk holds,
and delete its shared secret so no new token can be requested.
Disconnect in Monk stops reads and archives the connection with its
settings so the same instance can be reconnected later. Imported customers
and invoices stay in Monk with the balances from the last refresh, and
nothing is revoked inside Acumatica. Disconnect does not by itself stop
follow-ups on those invoices, so ask your Monk contact to switch off
follow-ups at the same time.
Instance and tenant: your Acumatica site URL and Connected Application
credentials.
Endpoint version: leave blank. Monk reads the Default endpoint at
version 25.200.001, which Acumatica 2025 R2 and later builds publish, and
the integration is validated against that version. If Web Service
Endpoints (SM207060) shows Default at another version, talk to your Monk
contact before connecting.
Branch: leave blank. It does not limit what Monk reads, which the
dedicated user’s branch access and restriction groups decide, and a branch
that user cannot access makes reads fail with an error. Fixed once data has
synced.
Licence tier: leave blank unless you are sure of it. Blank means Monk
reads at its slowest pace, one request at a time and at most 50 a minute.
Acumatica enforces its per-minute API limit by delaying requests, so a tier
set higher than your licence allows shows up as slower screens for your own
users rather than as an error in Monk. Set it to the tier shown in License
Monitoring Console (SM604000) only when you want the first read to go
faster.
Import start date, automatic import, and follow-ups: how far back Monk
imports invoices, whether new documents import automatically, and whether
Monk follows up on Acumatica invoices at all. All three are switched on with
your Monk contact during onboarding, and off the same way. Invoices and their
payments are imported together, so a partially paid invoice never appears
with its full balance.
Refresh behavior: a truncated or malformed response from Acumatica fails
the refresh instead of importing an empty page, so a bad read never
overwrites correct balances. A daily check calls your instance with the
stored grant, so a revoked grant or an instance Monk cannot read is reported
as Authorization needed and emailed to the recipients you set.
Refresh now reports that a refresh started; a first refresh can take
several minutes.
Payment push is optional and off by default. When it is on and a payment is
applied to invoices in Monk, Monk creates a payment in Acumatica, applies it to
the same invoices, and releases it. If that payment is later reapplied or moved
back to review in Monk, Monk voids the Acumatica payment and, for a reapply,
pushes a new one.
Before switching it on: give the dedicated user Delete access to
Payments and Applications (AR302000) and access to the posting branch (see
step 1). Then choose the payment method and cash account on the Payment
Posting card in Integrations → Acumatica. The branch is taken from the
cash account you pick.
Switching it on:Auto-push payments to Acumatica is turned on and off
with your Monk contact, like automatic import.
No duplicates: each pushed payment carries a Monk reference in its
external reference field, and Monk checks for it before creating a payment,
so a retry never posts the same payment twice.
Credit verification can block a void. If the customer is over their
credit limit or days-past-due threshold, Acumatica refuses the void. Monk
retries, then queues the void for your Monk contact to resolve with you. It
never changes your credit settings to force the void through.
How do our customers pay?
They keep using your existing payment methods. Monk reminders include a PDF
copy of the invoice but no payment link. Your team records payments in
Acumatica as usual, or in Monk with payment push switched on.Can we keep sending Acumatica dunning letters while we use Monk?
You can, but the two do not know about each other. Prepare Dunning Letters
(AR521000) reads Acumatica and Monk sends its own reminders on its own schedule,
so a customer covered by both receives both. When piloting, choose the customers
Monk follows up on and exclude them from your Acumatica dunning run.Do credit limits, credit holds, or customer classes affect what Monk sends?
An invoice on credit hold is not imported until it is released. Credit limits
and customer classes stay in Acumatica; you configure each customer’s
reminder sequence in Monk.Can we test the integration in an Acumatica sandbox before connecting production?
Yes. You can test the integration in an Acumatica sandbox before connecting
production. Let your Monk representative know before you start so we can
plan both connections and validate the workflows you need.Production requires a new connection, and any data imported from the sandbox
stays in Monk. Planning ahead helps us keep test data separate from your
production receivables.
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Monk API","colors":{"primary":"#EE5F00","light":"#FF8F67","dark":"#E73E00"},"logo":{"light":"https://mintcdn.com/monk-c4d823f6/rx1bQQkz2eDq5D3O/logo/logo-monk.svg?fit=max\u0026auto=format\u0026n=rx1bQQkz2eDq5D3O\u0026q=85\u0026s=31122cf1f65e80bbaa3e358b69b2cfe6","dark":"https://mintcdn.com/monk-c4d823f6/rx1bQQkz2eDq5D3O/logo/logo-monk.svg?fit=max\u0026auto=format\u0026n=rx1bQQkz2eDq5D3O\u0026q=85\u0026s=31122cf1f65e80bbaa3e358b69b2cfe6"},"favicon":"https://mintcdn.com/monk-c4d823f6/rx1bQQkz2eDq5D3O/logo/logo-monk.svg?fit=max\u0026auto=format\u0026n=rx1bQQkz2eDq5D3O\u0026q=85\u0026s=31122cf1f65e80bbaa3e358b69b2cfe6","api":{"openapi":["openapi/customers.yaml","openapi/invoices.yaml","openapi/portals.yaml","openapi/pricing.yaml"],"playground":{"display":"interactive"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"monk-c4d823f6","hasAudioNarration":false,"actualSubdomain":"monk-c4d823f6","customDomains":["docs.monk.com"],"gitSource":{"type":"github","owner":"withatlas","repo":"monk","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae91a342a3bd71ab749c8c8","collectionId":"a62a5ca0-a518-46f9-88c6-451db25026d5","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae91a342a3bd71ab749c8c8"},"entitlements":{},"buildId":"6ae91a342a3bd71ab749c8c8","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Documentation","count":20},{"language":"default","tag":"API Reference","count":19},{"language":"default","tag":"Integrations","count":14},{"language":"default","tag":"Portal Tasks","count":9},{"language":"default","tag":"Customers","count":5},{"language":"default","tag":"Get Started","count":3},{"language":"default","tag":"Pricing","count":3},{"language":"default","tag":"Webhooks","count":2},{"language":"default","tag":"Invoices","count":2},{"language":"default","tag":"Core Concepts","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations/acumatica","slug":"/integrations/acumatica","pageMetadata":{"title":"Acumatica","description":"Monk integration with Acumatica Cloud ERP","href":"/integrations/acumatica"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Monk integration with Acumatica Cloud ERP\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Info,Mermaid,OptimizedImage,Step,Steps,Table}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`acumatica`,children:`Acumatica`}),`\n`,_jsx(_components.p,{children:`Monk follows up on overdue Acumatica invoices and keeps customer replies,\npayment promises, and collection history together. Your team can see who has\npromised to pay and which conversations need attention.`}),`\n`,_jsxs(_components.p,{children:[`You continue to issue invoices in Acumatica, and Monk refreshes from it every\nhour. By default the connection is read-only. With\n`,_jsx(_components.a,{href:`#payment-push`,children:`payment push`}),` switched on, a payment recorded in Monk is also\nposted to Acumatica and applied to the invoice it pays.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works-in-practice`,children:`How it works in practice`}),`\n`,_jsx(_components.p,{children:`A customer receives a reminder for one overdue invoice and replies with a\npayment date. Monk records the promised date and pauses reminders based on\nyour team’s settings. A colleague can see the commitment alongside the\ninvoice without searching the inbox.`}),`\n`,_jsx(_components.p,{children:`Once your team records full payment in Acumatica, the next completed sync\nmarks the invoice as paid in Monk and stops reminders for it. If the customer\ndisputes the invoice, Monk pauses reminders and flags the conversation for\nreview.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-stays-in-acumatica-and-what-happens-in-monk`,children:`What stays in Acumatica and what happens in Monk`}),`\n`,_jsx(_components.p,{children:`Acumatica lets you configure dunning levels by customer class. If your team\nalso tracks payment promises and follow-up dates in inboxes or spreadsheets,\nMonk keeps those commitments and customer replies alongside the relevant\ninvoices.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`In Acumatica`}),_jsx(_components.th,{children:`In Monk`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Creating, releasing, and correcting AR documents`}),_jsx(_components.td,{children:`Following up on overdue invoices, per customer or customer group`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Recording payments, credit memos, and write-offs`}),_jsx(_components.td,{children:`Tracking payments and the remaining balance on each invoice`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Maintaining customer accounts and contacts`}),_jsx(_components.td,{children:`Using those contacts for collection reminders`})]})]})]}),`\n`,_jsx(_components.p,{children:`Credit limits, payment terms, and credit holds stay in Acumatica, along with\nthe general ledger, month-end close, and statutory reporting. Monk reports\naging and DSO for the invoices it imports.`}),`\n`,_jsx(_components.p,{children:`Reminders go to the contacts already on the Acumatica customer account: every\nactive contact with an email address, plus the account email when no contact\ncarries it. Recipients are reviewed with you during onboarding.`}),`\n`,_jsx(Heading,{level:`2`,id:`requirements-and-scope`,children:`Requirements and scope`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Acumatica 2025 R2 or later`}),`, Acumatica-hosted or self-hosted, reachable\nover public HTTPS. Monk reads the `,_jsx(_components.code,{children:`Default`}),` endpoint at version `,_jsx(_components.code,{children:`25.200.001`}),`,\nwhich 2025 R2 and later builds publish. To check, open `,_jsx(_components.strong,{children:`Web Service\nEndpoints`}),` (SM207060) or `,_jsx(_components.code,{children:`https://\u003cyour-site>/entity`}),` and look for `,_jsx(_components.code,{children:`Default`}),`\nat `,_jsx(_components.code,{children:`25.200.001`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`One tenant, one company, one branch per Monk org.`}),` The tenant is part of\nthe client ID. What Monk reads is decided by the dedicated user’s company and\nbranch access plus restriction groups in Acumatica; the `,_jsx(_components.strong,{children:`Branch`}),` setting in\nMonk does not narrow it. For a single-company pilot, restrict that user to the\npilot company and its approved branches before authorizing Monk. Confirm that\nthe user can select only that company in Acumatica. Records outside its access\nare left out without an error, so if receivables sit across several companies\nor branches, agree the setup with your Monk contact.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Single currency.`}),` Monk currently supports tenants that invoice in one\ncurrency, matching your Monk organization’s currency. Multi-currency support\nis planned. If your tenant invoices in multiple currencies, talk to your\nMonk representative about your requirements.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hourly refresh, plus on demand.`}),` Monk reads what changed since the last\nrun every hour, and `,_jsx(_components.strong,{children:`Refresh now`}),` starts a run immediately. Reminders use\nthe balance from the latest refresh, so after posting a large batch of\npayments, refresh before reminders go out.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`History.`}),` The first refresh reads customers, contacts, credit memos,\npayments, and applications in full, and invoices changed in the last 12\nmonths. The import start date agreed during onboarding decides which of those\nbecome invoices in Monk.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`One API user licence slot.`}),` Monk signs in as a dedicated Acumatica user,\nwhich holds one API user slot while connected.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Customer hierarchy.`}),` Monk reads the `,_jsx(_components.strong,{children:`Parent Account`}),` on a customer and\nlinks the child to its parent once both exist in Monk. Reminders go to each\ncustomer’s own contacts, parent or child.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`setting-up-acumatica`,children:`Setting up Acumatica`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Setup is done together with Monk.`}),` Steps 1 and 2 use standard Acumatica\nforms and need no customization project or installed component. Connecting,\nthe first sync, checking the imported invoices against Acumatica, and\nswitching on invoice import and follow-ups are done with a Monk engineer.\nAgree the import start date and the refresh-token setting with your Monk\ncontact before you register the Connected Application.`]})}),`\n`,_jsxs(_components.p,{children:[`Steps 1 and 2 are done by your Acumatica administrator; step 3 by a Monk user\nwho can manage integrations. Before you start, open `,_jsx(_components.strong,{children:`Integrations → Acumatica`}),`\nin Monk and copy the `,_jsx(_components.strong,{children:`Redirect URI`}),` shown there; step 2 needs it.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Create a restricted role and dedicated user`,children:[_jsxs(_components.p,{children:[`Create a role on `,_jsx(_components.strong,{children:`User Roles`}),` (SM201005), for example `,_jsx(_components.code,{children:`MONK-API-READ`}),`.\nIn `,_jsx(_components.strong,{children:`Access Rights by Screen`}),` (SM201020), set each of the following actual\nforms to `,_jsx(_components.strong,{children:`View Only`}),` and leave every other form revoked:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Customers (AR303000), under Receivables`}),`\n`,_jsx(_components.li,{children:`Invoices and Memos (AR301000), under Receivables`}),`\n`,_jsx(_components.li,{children:`Payments and Applications (AR302000), under Receivables`}),`\n`,_jsx(_components.li,{children:`Contacts (CR302000), under Marketing`}),`\n`]}),_jsx(Frame,{caption:`Desired permission outcome: three Receivables forms set to View Only, everything else revoked. Contacts (CR302000) is set the same way under Marketing.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=644546206ba0122f768cb6f3358bc241`,alt:`Acumatica permissions for Customers, Invoices and Memos, and Payments and Applications set to View Only`,\"data-og-width\":`830`,width:`830`,\"data-og-height\":`1056`,height:`1056`,\"data-path\":`images/integrations/acumatica/access-rights-by-role.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=280\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=7b5c295ca26ab92704fdd818ff8ca545 280w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=560\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=fc4f6e38d3b478893bb728b6a73e4b07 560w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=840\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=6bf1fb797f793e8ae88db90e31ac034a 840w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=1100\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=2d1ee88553d0ed2e9edd44dcba17a823 1100w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=1650\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=a64a757d8548bd5dc79985c1cfac6685 1650w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/access-rights-by-role.png?w=2500\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=a42c89f564f42df04bfb50bc855c77b2 2500w`})}),_jsxs(_components.p,{children:[`If you will use `,_jsx(_components.a,{href:`#payment-push`,children:`payment push`}),`, set `,_jsx(_components.strong,{children:`Payments and\nApplications`}),` (AR302000) to `,_jsx(_components.strong,{children:`Delete`}),` instead of View Only. Monk creates,\nreleases, voids, and deletes the payments it pushes, and a View Only user\nis refused. The user must also have access to the branch that pushed\npayments post to.`]}),_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Users`}),` (SM201010), create a dedicated user with only that role. For a\nsingle-company pilot, use your Acumatica company/branch access and\nrestriction-group configuration to limit this user to the pilot company and\nits approved branches. Sign in as this user and confirm the company picker\nexposes only that company before you connect Monk. It signs in to a browser\nonce, during consent, so it must be a regular user rather than Acumatica’s\nAPI-only user type. Check `,_jsx(_components.strong,{children:`License Monitoring Console`}),` (SM604000) for a\nfree API user slot if other integrations already use the API. If the user\nlater loses access to one of these forms, refreshes stop at that read until\naccess is restored.`]})]}),_jsxs(Step,{title:`Register the Connected Application`,children:[_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Connected Applications`}),` (SM303010):`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Flow`}),` to `,_jsx(_components.strong,{children:`Authorization Code`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Redirect URIs`}),` tab, paste the redirect URI copied from Monk.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Secrets`}),` tab, add a `,_jsx(_components.strong,{children:`Shared Secret`}),` and copy it when it is\nshown; Acumatica does not display it again.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Refresh Tokens`}),`, choose a mode other than No Refresh Tokens.\nWith sliding expiration the connection stays alive while Monk keeps\nsyncing, up to any absolute cap you set; with absolute expiration an\nadministrator re-authorizes on that schedule.`]}),`\n`,_jsxs(_components.li,{children:[`Save. Acumatica generates the client ID as `,_jsx(_components.code,{children:`\u003cGUID>@\u003cTenant>`}),`, for\nexample `,_jsx(_components.code,{children:`0A1B2C3D-4E5F-6789-ABCD-EF0123456789@LIVE`}),`, where the suffix is\nthe tenant you were signed in to. Monk needs the whole value. Your\nAcumatica username is not the client ID.`]}),`\n`]}),_jsx(Frame,{caption:`Flow set to Authorization Code and one shared secret added. The redirect URI lives on the Redirect URIs tab next to Secrets.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=0de46bc12499d7148e47ad2e54a36f1a`,alt:`Acumatica Connected Applications screen with the Authorization Code flow and a shared secret`,\"data-og-width\":`958`,width:`958`,\"data-og-height\":`320`,height:`320`,\"data-path\":`images/integrations/acumatica/connected-application.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=280\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=a54c4fa02c4be41ce1f71b4b1d543f7a 280w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=560\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=c918385a1c65c84f92d81c13be35d256 560w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=840\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=fc7b860a209a4f831bc8fc3191965c7b 840w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=1100\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=63d1a4852a1aa69c541aa752295737f6 1100w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=1650\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=d0cc994a764dca2ffda669b44438a4b9 1650w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/connected-application.png?w=2500\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=6113fc873967c050d84c5db6032597fa 2500w`})})]}),_jsxs(Step,{title:`Connect in Monk and approve access`,children:[_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Integrations → Acumatica`}),`, enter the instance URL, the full client\nID, and the client secret, then click `,_jsx(_components.strong,{children:`Save and authorize`}),`. The instance\nURL is the site root only, for example `,_jsx(_components.code,{children:`https://erp.example.com/Instance`}),` or\n`,_jsx(_components.code,{children:`https://yourcompany.acumatica.com`}),`. Do not enter a screen URL or an\nidentity URL such as `,_jsx(_components.code,{children:`https://yourcompany.acumatica.com/t/live/identity`}),`;\nAcumatica’s `,_jsx(_components.strong,{children:`Client Application Access`}),` page lists those identity\naddresses, but Monk builds them from the site root.\nMonk sends you to your instance: sign in as the dedicated user (sign out of\nAcumatica first, or use a private window) and approve the two permissions,\n`,_jsx(_components.strong,{children:`Access to Web Services API`}),` and `,_jsx(_components.strong,{children:`Offline Access`}),`.`]}),_jsxs(_components.p,{children:[`The authorization link expires after ten minutes and is bound to the Monk\nuser who started it. If it expires, click `,_jsx(_components.strong,{children:`Authorize in Acumatica`}),` on the\nMonk page to try again. If the user’s Acumatica role changes after Monk is\nconnected, click `,_jsx(_components.strong,{children:`Reauthorize in Acumatica`}),` to issue a fresh grant; your\nAcumatica settings and shared secret are unaffected.`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Branch`}),` field under `,_jsx(_components.strong,{children:`Instance settings`}),` does not limit what Monk\nreads: the dedicated user’s branch access and restriction groups decide\nthat. If you set a branch, choose one the dedicated user can access;\notherwise reads fail with an error. Set the branch right after connecting,\nbefore the first refresh. Once data has synced, the branch is fixed.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`supported-entities`,children:`Supported entities`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Monk entity`}),_jsx(_components.th,{children:`Acumatica entity`}),_jsx(_components.th,{children:`Acumatica form`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Customer`}),_jsx(_components.td,{children:`Customer, including its parent account`}),_jsx(_components.td,{children:`Customers (AR303000)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Customer contacts`}),_jsx(_components.td,{children:`Contact`}),_jsx(_components.td,{children:`Contacts (CR302000)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Invoice and lines`}),_jsx(_components.td,{children:`AR invoice, debit memo, overdue charge`}),_jsx(_components.td,{children:`Invoices and Memos (AR301000)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Credit memo`}),_jsx(_components.td,{children:`AR credit memo`}),_jsx(_components.td,{children:`Invoices and Memos (AR301000)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Payment`}),_jsx(_components.td,{children:`AR payment, prepayment`}),_jsx(_components.td,{children:`Payments and Applications (AR302000)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Payment application`}),_jsx(_components.td,{children:`AR application, including write-offs`}),_jsx(_components.td,{children:`Payments and Applications (AR302000)`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-acumatica-documents-map-to-monk`,children:`How Acumatica documents map to Monk`}),`\n`,_jsx(_components.p,{children:`Each sync records the payments, credit memos, and write-offs applied to\ninvoices already in Monk. Their balances reflect those applications. When\nAcumatica shows an invoice closed or with a zero balance, Monk marks it paid.`}),`\n`,_jsx(Mermaid,{chart:`flowchart LR\n P[\"Payment applied\"] --> S[\"Invoice balance in Monk\"]\n C[\"Credit memo applied\"] --> S\n W[\"Write-off\u003cbr/>(separate document, or\u003cbr/>entered on the payment)\"] --> S\n S -->|\"Fully covered\"| D[\"Paid\u003cbr/>Reminders stop\"]\n S -->|\"Balance remains\"| O[\"Open\u003cbr/>Reminders continue\"]`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`In Acumatica`}),_jsx(_components.th,{children:`In Monk`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A payment covers part of an invoice`}),_jsx(_components.td,{children:`An allocation for the paid amount; the invoice stays open for the remainder`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`One payment is applied to several invoices`}),_jsx(_components.td,{children:`Each invoice gets its own allocation, read from the application records`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A balance is written off with a separate write-off document`}),_jsx(_components.td,{children:`A non-cash settlement; the invoice closes without counting the amount as cash`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A write-off amount is entered while applying a payment`}),_jsx(_components.td,{children:`The same non-cash settlement; only the cash portion counts as cash received`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A released invoice is reversed with a credit memo (cancellation)`}),_jsx(_components.td,{children:`The invoice shows as paid by the credit memo and reminders stop`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`An invoice is on hold, on credit hold, or not yet released`}),_jsx(_components.td,{children:`Not imported; it appears once released`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A payment is applied without the invoice record changing`}),_jsx(_components.td,{children:`Picked up anyway: applications are read on their own, not inferred from the invoice`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A customer has a parent account`}),_jsx(_components.td,{children:`Linked to the parent once both exist in Monk; reminders still go to the customer’s contacts`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`A contact is inactive or has no email address`}),_jsx(_components.td,{children:`Not imported as a recipient`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`The API user loses access to one of the four forms`}),_jsx(_components.td,{children:`The refresh stops at that read; nothing partial reaches Monk until access is restored`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Acumatica returns a truncated or malformed page`}),_jsx(_components.td,{children:`The refresh fails instead of importing an empty page`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`The instance publishes `,_jsx(_components.code,{children:`Default`}),` at a version other than `,_jsx(_components.code,{children:`25.200.001`})]}),_jsxs(_components.td,{children:[`Talk to your Monk contact before connecting; the integration is validated against `,_jsx(_components.code,{children:`25.200.001`})]})]})]})]}),`\n`,_jsx(Frame,{caption:`A customer in Monk after a refresh: each Acumatica application arrives as a credit applied, a payment allocated, or an invoice paid.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=f74b8717ee2158be066566ba0a025cad`,alt:`Monk customer page showing recent activity entries for credits applied, payments allocated, and an invoice paid from Acumatica`,\"data-og-width\":`775`,width:`775`,\"data-og-height\":`665`,height:`665`,\"data-path\":`images/integrations/acumatica/monk-customer-activity.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=280\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=d474196d917ef878c85b28c61f791ea7 280w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=560\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=ffa993669ec029b55b9b9adb2b123999 560w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=840\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=0283f7a9440c86406bf3a47474e3b6a0 840w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=1100\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=cefaa5ae07460a301cae0f16cb56f0f8 1100w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=1650\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=60803b6c085f0eb98b41f88fd9fa3e27 1650w, https://mintcdn.com/monk-c4d823f6/B4LzyRdoqq5xZU5y/images/integrations/acumatica/monk-customer-activity.png?w=2500\u0026fit=max\u0026auto=format\u0026n=B4LzyRdoqq5xZU5y\u0026q=85\u0026s=6447699db640ae3804e8a2a39852c739 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`authentication-and-connection`,children:`Authentication and connection`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Your Acumatica administrator registers a `,_jsx(_components.strong,{children:`Connected Application`}),`\n(SM303010) with the Authorization Code flow. Monk requests two scopes, shown\non the consent screen as `,_jsx(_components.strong,{children:`Access to Web Services API`}),` and `,_jsx(_components.strong,{children:`Offline\nAccess`}),`, and acts as the Acumatica user who approves them.`]}),`\n`,_jsx(_components.li,{children:`Monk stores your instance URL, tenant, client ID, shared secret, and the\naccess and refresh tokens encrypted at rest, and rotates refresh tokens\nautomatically.`}),`\n`,_jsx(_components.li,{children:`The instance address is validated when you connect and each time Monk\nrequests a token: public HTTPS only, no private or internal hosts. Reads use\nthe validated address and never follow a redirect to another host.`}),`\n`,_jsxs(_components.li,{children:[`If the grant is revoked or a token refresh is refused, the connection shows\n`,_jsx(_components.strong,{children:`Authorization needed`}),` with an `,_jsx(_components.strong,{children:`Authorize in Acumatica`}),` button. To be\nemailed when that happens, turn on `,_jsx(_components.strong,{children:`Integration reconnect required`}),` under\nSettings → Notifications in Monk and add recipients.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`To revoke access at the source`}),`, open the Connected Application in\nAcumatica and click `,_jsx(_components.strong,{children:`Revoke Access`}),`, which removes the tokens Monk holds,\nand delete its shared secret so no new token can be requested.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Disconnect`}),` in Monk stops reads and archives the connection with its\nsettings so the same instance can be reconnected later. Imported customers\nand invoices stay in Monk with the balances from the last refresh, and\nnothing is revoked inside Acumatica. Disconnect does not by itself stop\nfollow-ups on those invoices, so ask your Monk contact to switch off\nfollow-ups at the same time.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration-and-sync`,children:`Configuration and sync`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Instance and tenant:`}),` your Acumatica site URL and Connected Application\ncredentials.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Endpoint version:`}),` leave blank. Monk reads the `,_jsx(_components.code,{children:`Default`}),` endpoint at\nversion `,_jsx(_components.code,{children:`25.200.001`}),`, which Acumatica 2025 R2 and later builds publish, and\nthe integration is validated against that version. If `,_jsx(_components.strong,{children:`Web Service\nEndpoints`}),` (SM207060) shows `,_jsx(_components.code,{children:`Default`}),` at another version, talk to your Monk\ncontact before connecting.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Branch:`}),` leave blank. It does not limit what Monk reads, which the\ndedicated user’s branch access and restriction groups decide, and a branch\nthat user cannot access makes reads fail with an error. Fixed once data has\nsynced.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Licence tier:`}),` leave blank unless you are sure of it. Blank means Monk\nreads at its slowest pace, one request at a time and at most 50 a minute.\nAcumatica enforces its per-minute API limit by delaying requests, so a tier\nset higher than your licence allows shows up as slower screens for your own\nusers rather than as an error in Monk. Set it to the tier shown in `,_jsx(_components.strong,{children:`License\nMonitoring Console`}),` (SM604000) only when you want the first read to go\nfaster.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Import start date, automatic import, and follow-ups:`}),` how far back Monk\nimports invoices, whether new documents import automatically, and whether\nMonk follows up on Acumatica invoices at all. All three are switched on with\nyour Monk contact during onboarding, and off the same way. Invoices and their\npayments are imported together, so a partially paid invoice never appears\nwith its full balance.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Refresh behavior:`}),` a truncated or malformed response from Acumatica fails\nthe refresh instead of importing an empty page, so a bad read never\noverwrites correct balances. A daily check calls your instance with the\nstored grant, so a revoked grant or an instance Monk cannot read is reported\nas `,_jsx(_components.strong,{children:`Authorization needed`}),` and emailed to the recipients you set.\n`,_jsx(_components.strong,{children:`Refresh now`}),` reports that a refresh started; a first refresh can take\nseveral minutes.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`payment-push`,children:`Payment push`}),`\n`,_jsx(_components.p,{children:`Payment push is optional and off by default. When it is on and a payment is\napplied to invoices in Monk, Monk creates a payment in Acumatica, applies it to\nthe same invoices, and releases it. If that payment is later reapplied or moved\nback to review in Monk, Monk voids the Acumatica payment and, for a reapply,\npushes a new one.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Before switching it on:`}),` give the dedicated user `,_jsx(_components.strong,{children:`Delete`}),` access to\nPayments and Applications (AR302000) and access to the posting branch (see\nstep 1). Then choose the payment method and cash account on the `,_jsx(_components.strong,{children:`Payment\nPosting`}),` card in `,_jsx(_components.strong,{children:`Integrations → Acumatica`}),`. The branch is taken from the\ncash account you pick.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Switching it on:`}),` `,_jsx(_components.strong,{children:`Auto-push payments to Acumatica`}),` is turned on and off\nwith your Monk contact, like automatic import.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No duplicates:`}),` each pushed payment carries a Monk reference in its\nexternal reference field, and Monk checks for it before creating a payment,\nso a retry never posts the same payment twice.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Credit verification can block a void.`}),` If the customer is over their\ncredit limit or days-past-due threshold, Acumatica refuses the void. Monk\nretries, then queues the void for your Monk contact to resolve with you. It\nnever changes your credit settings to force the void through.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`frequently-asked-questions`,children:`Frequently asked questions`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`How do our customers pay?`}),`\nThey keep using your existing payment methods. Monk reminders include a PDF\ncopy of the invoice but no payment link. Your team records payments in\nAcumatica as usual, or in Monk with `,_jsx(_components.a,{href:`#payment-push`,children:`payment push`}),` switched on.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can we keep sending Acumatica dunning letters while we use Monk?`}),`\nYou can, but the two do not know about each other. Prepare Dunning Letters\n(AR521000) reads Acumatica and Monk sends its own reminders on its own schedule,\nso a customer covered by both receives both. When piloting, choose the customers\nMonk follows up on and exclude them from your Acumatica dunning run.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Do credit limits, credit holds, or customer classes affect what Monk sends?`}),`\nAn invoice on credit hold is not imported until it is released. Credit limits\nand customer classes stay in Acumatica; you configure each customer’s\nreminder sequence in Monk.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Can we test the integration in an Acumatica sandbox before connecting production?`}),`\nYes. You can test the integration in an Acumatica sandbox before connecting\nproduction. Let your Monk representative know before you start so we can\nplan both connections and validate the workflows you need.`]}),`\n`,_jsx(_components.p,{children:`Production requires a new connection, and any data imported from the sandbox\nstays in Monk. Planning ahead helps us keep test data separate from your\nproduction receivables.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Acumatica","description":"Monk integration with Acumatica Cloud ERP","href":"/integrations/acumatica"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Acumatica","slug":"acumatica","depth":1,"children":[]},{"title":"How it works in practice","slug":"how-it-works-in-practice","depth":2,"children":[]},{"title":"What stays in Acumatica and what happens in Monk","slug":"what-stays-in-acumatica-and-what-happens-in-monk","depth":2,"children":[]},{"title":"Requirements and scope","slug":"requirements-and-scope","depth":2,"children":[]},{"title":"Setting up Acumatica","slug":"setting-up-acumatica","depth":2,"children":[]},{"title":"Supported entities","slug":"supported-entities","depth":2,"children":[]},{"title":"How Acumatica documents map to Monk","slug":"how-acumatica-documents-map-to-monk","depth":2,"children":[]},{"title":"Authentication and connection","slug":"authentication-and-connection","depth":2,"children":[]},{"title":"Configuration and sync","slug":"configuration-and-sync","depth":2,"children":[]},{"title":"Payment push","slug":"payment-push","depth":2,"children":[]},{"title":"Frequently asked questions","slug":"frequently-asked-questions","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"monk-c4d823f6","siteName":"Monk API","title":"Acumatica - Monk API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-20T17:08:23.204Z","originalFileLocation":"integrations/acumatica.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Monk integration with Acumatica Cloud ERP\">\u003cmeta data-mint-head name=\"application-name\" content=\"Monk API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Acumatica - Monk API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Monk integration with Acumatica Cloud ERP\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Monk API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.monk.com/integrations/acumatica\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://monk-c4d823f6.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=Acumatica\u0026amp;description=Monk+integration+with+Acumatica+Cloud+ERP\u0026amp;theme=356a2a27950367233e92d29a\u0026amp;signature=79b34bd29b09d8a531445772c48e3819f8ee17948797ebd5ed13db438b21eae0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Acumatica - Monk API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Monk integration with Acumatica Cloud ERP\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://monk-c4d823f6.mintlify.app/_mintlify/api/og/v2?division=Integrations\u0026amp;title=Acumatica\u0026amp;description=Monk+integration+with+Acumatica+Cloud+ERP\u0026amp;theme=356a2a27950367233e92d29a\u0026amp;signature=79b34bd29b09d8a531445772c48e3819f8ee17948797ebd5ed13db438b21eae0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/monk-c4d823f6/nFt2Vdb22snqqTE2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Monk API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#EE5F00\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.monk.com/integrations/acumatica\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/acumatica.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.monk.com/#organization\",\"name\":\"Monk API\",\"url\":\"https://docs.monk.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/monk-c4d823f6/rx1bQQkz2eDq5D3O/logo/logo-monk.svg?fit=max\u0026auto=format\u0026n=rx1bQQkz2eDq5D3O\u0026q=85\u0026s=31122cf1f65e80bbaa3e358b69b2cfe6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.monk.com#website\",\"name\":\"Monk API\",\"url\":\"https://docs.monk.com\",\"publisher\":{\"@id\":\"https://docs.monk.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.monk.com/integrations/acumatica#webpage\",\"url\":\"https://docs.monk.com/integrations/acumatica\",\"name\":\"Acumatica\",\"description\":\"Monk integration with Acumatica Cloud ERP\",\"dateModified\":\"2026-10-20T17:08:23.204Z\",\"isPartOf\":{\"@id\":\"https://docs.monk.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.monk.com/integrations/acumatica#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.monk.com/integrations/acumatica#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://docs.monk.com/integrations/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Acumatica\",\"item\":\"https://docs.monk.com/integrations/acumatica\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.monk.com/integrations/acumatica#article\",\"headline\":\"Acumatica\",\"name\":\"Acumatica\",\"description\":\"Monk integration with Acumatica Cloud ERP\",\"url\":\"https://docs.monk.com/integrations/acumatica\",\"mainEntityOfPage\":{\"@id\":\"https://docs.monk.com/integrations/acumatica#webpage\"},\"dateModified\":\"2026-10-20T17:08:23.204Z\",\"publisher\":{\"@id\":\"https://docs.monk.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.monk.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Monk API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Monk API","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Authentication","href":"/authentication"},{"title":"Monk MCP Access","href":"/mcp-access"}]},{"group":"Core Concepts","pages":[{"title":"Webhooks","href":"/concepts/webhooks"}]},{"group":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"},{"title":"Rillet","href":"/integrations/rillet"},{"title":"Stripe","href":"/integrations/stripe"},{"title":"NetSuite","href":"/integrations/netsuite"},{"title":"QuickBooks","href":"/integrations/quickbooks"},{"title":"Campfire","href":"/integrations/campfire"},{"title":"Dynamics 365","href":"/integrations/dynamics-365"},{"title":"Xero","href":"/integrations/xero"},{"title":"Sage Intacct","href":"/integrations/sage-intacct"},{"title":"SAP S/4HANA","href":"/integrations/sap-s4hana"},{"title":"JD Edwards","description":"Monk integration with Oracle JD Edwards EnterpriseOne","href":"/integrations/jd-edwards"},{"title":"Acumatica","href":"/integrations/acumatica"},{"title":"Maxio and SaaSOptics","description":"Migrating billing history from Maxio (Advanced Billing) or SaaSOptics into Monk","href":"/integrations/maxio-saasoptics"},{"group":"File integration (SFTP)","root":{"title":"File integration (SFTP)","href":"/integrations/sftp"},"pages":[{"title":"SFTP Import format","href":"/integrations/sftp-import-format"},{"title":"SFTP Export format","href":"/integrations/sftp-export-format"},{"title":"SFTP Bank format","href":"/integrations/sftp-bank-format"}]}]},{"group":"Webhooks","pages":[{"title":"Webhook Events","href":"/api-reference/webhooks/events"},{"title":"Signature Verification","href":"/api-reference/webhooks/verification"}]}]},{"tab":"API Reference","icon":"square-terminal","pages":[{"title":"API Reference","href":"/api-reference/create-customer"}]}]},"basePath":"","title":"Acumatica - Monk API","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-PS-3COT9.js","DynamicMarkdown-BcnBltEQ.js","zoom-image-lightbox-B4-wUcHm.js","lightbox-handle-r17bVUz3.js"]}