{"templateId":"markdown","sharedDataIds":{},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Resolve MCP"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"resolve-mcp","__idx":0},"children":["Resolve MCP"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You are helping the user manage their Resolve Pay account through the MCP tools."," ","Before doing anything else, call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_resolve_accounts"]}," to confirm which account is"," ","active. If multiple accounts exist, ask the user which one to use."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Partner accounts:"]}," if ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_resolve_accounts"]}," shows a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_type"]},", this account"," ","is a partner and does ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["not"]}," have the merchant tools below — it has the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_*"]}," ","tools instead. Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["resolve-partner-mcp"]}," plugin/skill for it."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"understanding-resolve-b2b-net-terms","__idx":1},"children":["Understanding Resolve: B2B Net Terms"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Resolve is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2B net terms financing platform"]},". The roles are:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["You (the account holder / seller)"]}," — you sell goods or services to business"," ","customers on credit terms (net30, net60, etc.). Resolve advances you early payment"," ","against your invoices and collects from your customers."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer (Buyer)"]}," — the business that buys from you. In any invoice, the customer"," ","is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["buyer who owes the money"]},". Resolve extends a credit line to the customer"," ","and collects payment from them directly."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On an invoice:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer_id"]}," → the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["buyer"]}," (your customer who will pay)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You are implicitly the creditor — you created the invoice and will receive the"," ","advance payout from Resolve"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This means: when you say \"my customer Acme Corp\", you mean the buyer."," ","When you say \"I want to get paid on invoice #1234\", you want Resolve to advance"," ","you cash against that invoice."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"account-setup","__idx":2},"children":["Account Setup"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always start every session with:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"list_resolve_accounts()\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the returned account ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," (or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]},") for any tool that requires it."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"searching-for-customers","__idx":3},"children":["Searching for Customers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The API uses ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["exact-match filters"]}," for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_name"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]}," — there is no"," ","fuzzy search. Use a progressive narrowing strategy:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Try the full exact string first"]}," — if the user says \"Acme Hardware Inc\","," ","filter ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_name=Acme Hardware Inc"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["If no results"]},", try progressively shorter prefixes or common abbreviations:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Acme Hardware"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Acme"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["If still no results"]},", list without filter (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_customers(limit=25)"]},") and"," ","scan visually, or ask for clarification."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["For email-based lookup"]},", try ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[email]=<address>"]}," — emails are exact match too."]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# Step 1: exact match\nlist_customers(filter={\"business_name\": {\"eq\": \"Acme Hardware Inc\"}}, limit=10)\n\n# Step 2: shorter form if nothing found\nlist_customers(filter={\"business_name\": {\"eq\": \"Acme Hardware\"}}, limit=10)\n\n# Step 3: broadest fallback\nlist_customers(limit=25, sort=\"business_name\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always show the matched customer's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credit_status"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_available"]}," alongside"," ","the name so it's clear whether the customer can accept a new invoice."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"searching-for-invoices","__idx":4},"children":["Searching for Invoices"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Filter fields available: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["number"]}," (eq), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order_number"]}," (eq), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["po_number"]}," (eq),"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer_id"]}," (eq), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fully_paid"]}," (eq), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_balance"]}," (gt/lt), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created_at"]}," (range)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Strategy — try the most specific identifier first:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the user gives an invoice number → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[number]=<value>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the user gives a PO number → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[po_number]=<value>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the user gives an order number → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[order_number]=<value>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the user names a customer → look up the customer ID first, then"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filter[customer_id]=<id>"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fallback → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_invoices(limit=25)"]}," and scan"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# By invoice number\nlist_invoices(filter={\"number\": {\"eq\": \"INV-1234\"}}, limit=5)\n\n# By customer (after resolving customer ID)\nlist_invoices(filter={\"customer_id\": {\"eq\": \"X50sgfRd\"}}, limit=25)\n\n# Open invoices only\nlist_invoices(filter={\"fully_paid\": {\"eq\": False}}, limit=25)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"uploading-an-invoice-pdf","__idx":5},"children":["Uploading an Invoice PDF"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can either provide a publicly accessible PDF URL as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant_invoice_url"]},", or use the"," ","validated document-upload API and provide its accepted ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant_invoice_document_id"]}," when creating"," ","or updating the invoice. The workflow below is the legacy URL option."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Never read the PDF into the LLM context."]}," Upload it directly via curl."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-by-step","__idx":6},"children":["Step-by-step"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 1 — Get a presigned upload URL"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"result = create_temp_file(filename=\"invoice-1234.pdf\", content_type=\"application/pdf\")\n# Returns: file_id, upload_url (PUT), download_url\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 2 — Upload the PDF bytes directly to S3"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["⚠️ ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["S3 domain whitelist required."]}," The presigned URL points to an AWS S3 domain"," ","(typically ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*.s3.amazonaws.com"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*.s3.us-west-2.amazonaws.com"]},"). If running"," ","curl in a restricted environment, that domain must be whitelisted for outbound"," ","HTTPS. Without it, the upload will fail with a connection error."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run in bash (or ask the user to run locally):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -X PUT \\\n  -H \"Content-Type: application/pdf\" \\\n  --data-binary @/path/to/invoice-1234.pdf \\\n  \"<upload_url>\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The PUT request must include the correct ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Content-Type"]}," header. No auth headers needed —"," ","the URL is presigned. A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200 OK"]}," response from S3 means the upload succeeded."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Step 3 — Use the download_url as merchant_invoice_url"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"create_invoice(\n  customer_id          = \"<customer_id>\",\n  amount               = 2500.00,\n  number               = \"INV-1234\",\n  merchant_invoice_url = \"<download_url from Step 1>\",\n  po_number            = \"PO-9001\"\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["If a file was already uploaded"]}," (in a previous session or earlier in this one),"," ","call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_temp_files()"]}," to retrieve a fresh ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," — the signed URLs expire,"," ","but ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_temp_files"]}," mints a new one."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Max file size:"]}," 25 MB. Allowed types: pdf, csv, xls, xlsx, json, txt, png, jpg,"," ","jpeg, gif, webp, doc, docx. For invoices, always use PDF."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"invoice-lifecycle","__idx":7},"children":["Invoice Lifecycle"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A typical invoice flows through these stages. Each step corresponds to one or more"," ","MCP tool calls:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"create_invoice  →  update_invoice (set terms + advance_requested)\n    →  send_invoice  →  [advance_invoice if advance_requested=true]\n    →  [customer pays]  →  fully_paid=true\n"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"key-rules","__idx":8},"children":["Key rules"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["terms"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["advance_requested"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["must be set together"]},". Don't pass one without the"," ","other. Best practice: omit both on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_invoice"]},", then call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["update_invoice"]}," to"," ","set them before sending."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant_invoice_url"]}," is validated by Resolve by actually downloading the URL."," ","Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_temp_file"]}," — placeholder URLs will fail."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["An invoice must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sent"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["send_invoice"]},") before a credit note can be issued"," ","against it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A sent invoice cannot be deleted; use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["void_invoice"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancel_invoice"]}," instead."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"creating-and-sending-an-invoice-full-example","__idx":9},"children":["Creating and sending an invoice (full example)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# 1. Upload PDF\ntemp = create_temp_file(filename=\"inv-1234.pdf\", content_type=\"application/pdf\")\n# [upload via curl to temp.upload_url]\n\n# 2. Resolve customer ID\ncustomers = list_customers(filter={\"business_name\": {\"eq\": \"Acme Corp\"}}, limit=5)\ncustomer_id = customers.results[0].id\n\n# 3. Create invoice\ninv = create_invoice(\n  customer_id          = customer_id,\n  amount               = 5000.00,\n  number               = \"INV-1234\",\n  merchant_invoice_url = temp.download_url,\n  po_number            = \"PO-5500\"\n)\n\n# 4. Set terms (before sending)\nupdate_invoice(\n  merchant_invoice_id = inv.id,\n  terms               = \"net30\",\n  advance_requested   = True   # set False if you don't want an advance\n)\n\n# 5. Send to customer\nsend_invoice(merchant_invoice_id = inv.id)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"customer-management","__idx":10},"children":["Customer Management"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"creating-a-new-customer","__idx":11},"children":["Creating a new customer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Required: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_name"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_address"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_city"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_state"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_zip"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_country"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["business_ap_email"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"create_customer(\n  business_name    = \"Acme Corp\",\n  business_address = \"456 Commerce Blvd\",\n  business_city    = \"Austin\",\n  business_state   = \"TX\",\n  business_zip     = \"78701\",\n  business_country = \"US\",\n  business_ap_email = \"ap@acmecorp.com\",\n  email            = \"owner@acmecorp.com\"\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"customer-supporting-documents","__idx":12},"children":["Customer supporting documents"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select the account with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_resolve_accounts"]},". For merchant v5 accounts, find or"," ","create the customer with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_customers"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_customer"]},", then call"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_customer_document"]},". For partner accounts, use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_list_customers"]}," /"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_create_customer"]},", then ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["partner_create_customer_document"]},". Both require"," ","write access and take the returned customer relationship ID as"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant_customer_id"]},". Upload documents separately from customer creation."," ","The partner examples below also apply to merchants with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_customer_document"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Required metadata: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["document_type"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filename"]}," (including extension), and"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["filetype"]}," (MIME type matching that extension). Supported document types:"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_statements"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credit_references"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["financial_statements"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment_history"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["other"]},". Bank statements must be PDFs. Other types"," ","accept PDF, PNG, JPEG, CSV, XLS, or XLSX. Do not use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["other_documents"]}," or"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["personal_guarantee"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["additional_data_request_id"]}," only for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bank_statements"]},", and only for"," ","an open banking-data request belonging to this customer."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For local files, omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," to request a presigned upload:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"upload = partner_create_customer_document(\n  merchant_customer_id = \"<customer ID>\",\n  document_type        = \"bank_statements\",\n  filename             = \"bank-statement.pdf\",\n  filetype             = \"application/pdf\"\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["PUT the file bytes directly to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["upload.upload_url"]}," before"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["upload.upload_expires_at"]},", including every header in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["upload.upload_headers"]},"."," ","Do not read the file bytes into model context. If the document is already hosted,"," ","supply its public HTTP(S) URL as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," instead; Resolve queues the fetch."," ","An existing temp upload's fresh ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," can also be used in that mode."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A successful response records the document and accepts its transfer; validation"," ","happens asynchronously. Keep the returned ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["document_id"]},". In remote-download mode,"," ","check ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queue_dispatch_status"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["queued"]}," means download was queued, while"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}," means dispatch failed even if HTTP status is 200. Report that failure"," ","instead of claiming the upload completed. The response has no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field."," ","Customer credit status is not proof that this particular document validated."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"credit-workflow","__idx":13},"children":["Credit workflow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["New customers have ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credit_status=null"]},". To get them a credit line:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request_credit_check(merchant_customer_id=<id>)"]}," — submits for underwriting"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A 204 response means the request was accepted. Credit status will update to"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]}," shortly, then ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approved"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["declined"]}," within ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1 business day"]}," ","(instant decisions are possible but not guaranteed). This is an async process —"," ","a successful API call does not mean the decision is ready yet. Poll"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["get_customer"]}," periodically to check for status changes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Once ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approved"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["net_terms_status"]}," will be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending_enrollment"]}," — the customer"," ","must complete enrollment via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["net_terms_enrollment_url"]}," before invoices can be"," ","advanced"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Credit status meanings:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," — no credit check requested yet"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]}," — credit check submitted, awaiting decision"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["approved"]}," — customer has a credit line (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_available"]}," > 0 = can take new invoices)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["declined"]}," — Resolve declined the credit application"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hold"]}," — account on hold (15+ days overdue)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deactivated"]}," — account deactivated"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"shipments","__idx":14},"children":["Shipments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A shipment tracks fulfillment for a specific invoice. One invoice can have multiple"," ","shipments (partial shipments). Resolve uses shipment data to confirm delivery."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"create_shipment(\n  merchant_invoice_id      = \"INV_ID\",\n  fulfillment_method       = \"shipping_provider\",   # or: self_delivery, customer_pickup, services_only\n  shipment_tracking_number = \"1Z999AA10123456784\",\n  shipment_courier         = \"ups\"\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After creating, use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sync_shipment_tracking"]}," to pull real-time status from the courier:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"sync_shipment_tracking(shipment_id = \"SHIPMENT_ID\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"credit-notes","__idx":15},"children":["Credit Notes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Issue a credit note to reduce what a customer owes on a sent invoice."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Valid ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reason_code"]}," values:"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chargeback"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["duplicate"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fraudulent"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requested_by_customer"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["missing_remittance"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["overpayment_on_invoice"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice_was_refunded"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["double_payment_on_invoice"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["missing_invoice_in_resolve"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credit_transfer"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["other"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"create_credit_note(\n  invoice_id     = \"INV_ID\",\n  amount         = 150.00,\n  number         = \"CN-0042\",\n  reason_code    = \"requested_by_customer\",\n  reason_message = \"Customer returned 3 units of Widget A\"\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The invoice must have been ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sent"]}," before a credit note can be applied. To cancel a"," ","credit note, call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["void_credit_note(credit_note_id=<id>)"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"payments","__idx":16},"children":["Payments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Payments are ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["created by Resolve"]}," when customers pay their invoices — you cannot"," ","create them directly. Use these tools to view payment history:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"list_payments(limit=25)\nget_payment(payment_id=\"<payment_id>\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each payment shows which invoices it was applied to and the payment method (ACH, check,"," ","wire, etc.)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"payouts","__idx":17},"children":["Payouts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Payouts are the funds Resolve sends you. They are read-only:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"list_payouts(limit=25)\nget_payout(payout_id=\"<payout_id>\")\nlist_payout_transactions(limit=25)          # individual transactions within payouts\nget_payout_transaction(payout_transaction_id=\"<id>\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"accounting-sync-external-sync","__idx":18},"children":["Accounting Sync (External Sync)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the account has an accounting platform connected, Resolve keeps invoices, customers,"," ","and payments in step with it on its own schedule. These tools let you trigger a"," ","synchronization on demand and check its state."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tool"},"children":["Tool"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["get_external_account_sync_settings()"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Read the connected platform and sync state"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sync_external_account_data(platform=..., full_sync=...)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Queue a sync"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fetch_external_account_invoice_pdf(merchant_invoice_id=...)"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pull an invoice's PDF from the accounting platform"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Supported platforms: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quickbooks_online"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["netsuite"]},". ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connecting or disconnecting a"," ","platform is done in the Resolve dashboard, not through the MCP"]}," — there are no connect"," ","or disconnect tools."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"always-check-the-state-first","__idx":19},"children":["Always check the state first"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"get_external_account_sync_settings()\n# → platform, status, last_sync_started_at, last_sync_completed_at, progress, error\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," tells you what's possible:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["disconnected"]}," — no platform connected (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["platform"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},"). Nothing to sync; tell"," ","the user to connect one in the dashboard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["idle"]}," — connected, nothing running. Safe to trigger a sync."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["syncing"]}," — a sync is already in progress. Don't queue another; report progress instead."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}," — the last sync failed. Show ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error.message"]}," before retrying."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["progress"]}," (0–100) is only reported for QuickBooks Online; it is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," for NetSuite."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"triggering-a-sync","__idx":20},"children":["Triggering a sync"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"# Incremental — only what changed since the last sync (the default)\nsync_external_account_data(platform=\"quickbooks_online\")\n\n# Full — re-fetch everything\nsync_external_account_data(platform=\"quickbooks_online\", full_sync=True)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A sync is queued, not immediate."]}," A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}," means the job was accepted. Poll"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["get_external_account_sync_settings()"]}," to follow it: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," goes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["syncing"]},", then back"," ","to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["idle"]}," on success or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}," with an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error.message"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rate-limits","__idx":21},"children":["Rate limits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tracked per platform, and incremental vs full are budgeted separately:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Sync type"},"children":["Sync type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Limit"},"children":["Limit"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Incremental (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["full_sync=False"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1 per 5 minutes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Full (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["full_sync=True"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["1 per hour"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Exceeding a limit returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Retry-After"]}," header giving the seconds to wait."," ","Don't retry in a loop — tell the user how long to wait. Prefer incremental syncs; only"," ","use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["full_sync=True"]}," when records are actually missing or the user asks for a full"," ","re-sync, since it burns the much scarcer hourly budget."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"fetching-an-invoice-pdf-from-the-accounting-platform","__idx":22},"children":["Fetching an invoice PDF from the accounting platform"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For an invoice that originated in the connected accounting platform, this pulls the"," ","platform's own PDF and attaches it to the Resolve invoice — no upload needed:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"fetch_external_account_invoice_pdf(merchant_invoice_id=\"<invoice_id>\")\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This only works if the invoice is already linked to a record on the connected platform."," ","A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404"]}," means the invoice doesn't exist on this account; a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400"]}," usually means it isn't"," ","linked to the accounting platform, in which case attach a PDF the normal way instead."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"webhooks","__idx":23},"children":["Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set up webhooks to receive real-time events from Resolve. Supported events:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice.created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["invoice.balance_updated"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer.created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer.status_updated"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer.line_amount_updated"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer.advance_rate_updated"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customer.credit_decision_created"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order.created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["order.updated"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment.created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payment.status_changed"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payout.created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payout.status_changed"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The four ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant.*"]}," topics (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["underwriting_completed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["more_info_needed"]},","," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mal_updated"]},") are partner-only and not available on a merchant account."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_webhooks()"]}," shows the endpoints already configured. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delete_webhook"]}," takes the"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endpoint_url"]}," (not an id) — the URL identifies the endpoint."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"upsert_webhook(\n  endpoint_url = \"https://yourserver.com/resolve-webhook\",   # must be https\n  events       = {                                          # object of booleans, not a list\n    \"invoice.created\": True,\n    \"invoice.balance_updated\": True,\n    \"customer.status_updated\": True\n  }\n)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Always verify webhook signatures using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["x-webhook-signature"]}," HMAC-SHA256 header."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-requests--tool-mapping","__idx":24},"children":["Common Requests → Tool Mapping"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Request"},"children":["Request"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Tool(s) to call"},"children":["Tool(s) to call"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Find my customer Acme Corp\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_customers(filter={\"business_name\":...})"]}," → progressive"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Create a new customer\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_customer(...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Submit Acme for a credit check\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request_credit_check(merchant_customer_id=...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Create and send an invoice\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_temp_file"]}," → upload → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_invoice"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["update_invoice"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["send_invoice"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Upload my invoice PDF\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_temp_file"]}," → provide curl command for upload"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Find invoice #INV-1234\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_invoices(filter={\"number\":{\"eq\":\"INV-1234\"}})"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"What's the balance on Acme's account?\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_customers(filter=...)"]}," → check ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_balance"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount_available"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Void an invoice\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["void_invoice(merchant_invoice_id=...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Add tracking to an invoice\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_shipment(...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Issue a refund / credit\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_credit_note(...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Show recent payments\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_payments(limit=25)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Sync my QuickBooks / NetSuite now\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["get_external_account_sync_settings"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sync_external_account_data(platform=...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Is my accounting sync working?\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["get_external_account_sync_settings()"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Get the PDF from QuickBooks for this invoice\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fetch_external_account_invoice_pdf(merchant_invoice_id=...)"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Set up a webhook\""]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["upsert_webhook(endpoint_url=..., events={...})"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"async-operations","__idx":25},"children":["Async Operations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["200"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["204"]}," response from any create or update call means Resolve ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["accepted"]}," the"," ","request — it does not mean the operation is fully complete. Most changes (credit checks,"," ","invoice sends, advances, enrollment status) are processed asynchronously in the"," ","background. After a successful call, tell the user the action was submitted and advise"," ","them to check back (or re-fetch the resource) in a few minutes to confirm the final"," ","state."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"error-handling","__idx":26},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["401 authentication_error"]}," — credentials are invalid or the account is inactive."," ","Check your API key in the Resolve dashboard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["404 not_found_error"]}," — the ID doesn't exist. Re-verify the ID from a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_*"]}," call."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["400 validation_error"]}," — a required field is missing or a field value is invalid."," ","Read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["error.details"]}," and fix the specific field."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["429 rate_limit_error"]}," — too many requests. Wait a few seconds and retry."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Invoice PDF download failure"]}," — Resolve validates the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["merchant_invoice_url"]}," by"," ","downloading it. If this fails, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["download_url"]}," from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["create_temp_file"]}," may have"," ","expired. Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["list_temp_files()"]}," to get a fresh signed URL."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"output-style","__idx":27},"children":["Output Style"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Show customer name, credit status, and available credit together"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Show invoice number, amount, terms, and status together"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["For multi-step workflows (create → update → send), confirm each step before"," ","proceeding to the next"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If an action is destructive (void, cancel, delete), ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["confirm before calling the tool"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Amounts are decimal dollars (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2500.00"]},"), not cents — pass and display them as-is"]}]}]},"headings":[{"value":"Resolve MCP","id":"resolve-mcp","depth":1},{"value":"Understanding Resolve: B2B Net Terms","id":"understanding-resolve-b2b-net-terms","depth":2},{"value":"Account Setup","id":"account-setup","depth":2},{"value":"Searching for Customers","id":"searching-for-customers","depth":2},{"value":"Searching for Invoices","id":"searching-for-invoices","depth":2},{"value":"Uploading an Invoice PDF","id":"uploading-an-invoice-pdf","depth":2},{"value":"Step-by-step","id":"step-by-step","depth":3},{"value":"Invoice Lifecycle","id":"invoice-lifecycle","depth":2},{"value":"Key rules","id":"key-rules","depth":3},{"value":"Creating and sending an invoice (full example)","id":"creating-and-sending-an-invoice-full-example","depth":3},{"value":"Customer Management","id":"customer-management","depth":2},{"value":"Creating a new customer","id":"creating-a-new-customer","depth":3},{"value":"Customer supporting documents","id":"customer-supporting-documents","depth":3},{"value":"Credit workflow","id":"credit-workflow","depth":3},{"value":"Shipments","id":"shipments","depth":2},{"value":"Credit Notes","id":"credit-notes","depth":2},{"value":"Payments","id":"payments","depth":2},{"value":"Payouts","id":"payouts","depth":3},{"value":"Accounting Sync (External Sync)","id":"accounting-sync-external-sync","depth":2},{"value":"Always check the state first","id":"always-check-the-state-first","depth":3},{"value":"Triggering a sync","id":"triggering-a-sync","depth":3},{"value":"Rate limits","id":"rate-limits","depth":3},{"value":"Fetching an invoice PDF from the accounting platform","id":"fetching-an-invoice-pdf-from-the-accounting-platform","depth":3},{"value":"Webhooks","id":"webhooks","depth":2},{"value":"Common Requests → Tool Mapping","id":"common-requests--tool-mapping","depth":2},{"value":"Async Operations","id":"async-operations","depth":2},{"value":"Error Handling","id":"error-handling","depth":2},{"value":"Output Style","id":"output-style","depth":2}],"frontmatter":{"name":"resolve-mcp","description":"Assistant for managing a Resolve Pay account via the MCP. Use this skill whenever the user wants to manage their Resolve account: look up customers or invoices, create or send invoices, upload invoice PDFs, track shipments, manage credit notes, sync a connected accounting platform, or understand the state of their receivables. Triggers on: \"find my customer\", \"create an invoice\", \"upload a PDF\", \"send invoice to\", \"check payment status\", \"add a shipment\", \"issue a credit note\", \"request a credit check\", \"sync my QuickBooks\", \"sync NetSuite\", \"is my accounting sync working\", or any task involving Resolve customers, invoices, orders, shipments, payments, credit notes, or accounting sync.\n","seo":{"title":"Resolve MCP"}},"lastModified":"2026-10-01T20:23:59.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/assets/skill","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}