{"openapi":"3.1.0","info":{"title":"MCA Manager Public API","version":"1.0.0","description":"REST API for MCA Manager. Requests are authenticated with a per-tenant API key (Authorization: Bearer mca_live_…) and scoped by the key's permission flags. The base URL is your company host, e.g. https://acme.mcamgr.com. Outbound webhooks (configured under Settings → Webhooks) POST signed JSON (HMAC-SHA256, headers X-Timestamp / X-Signature) for entity created/updated/deleted/status events; verify the signature over `timestamp + \".\" + body`."},"servers":[{"url":"https://{company}.mcamgr.com","variables":{"company":{"default":"acme"}}}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"mca_live_*"}},"schemas":{"Lead":{"type":"object","properties":{"id":{"type":"integer"},"businessName":{"type":"string"},"contactName":{"type":"string","nullable":true},"email":{"type":"string","nullable":true},"phone":{"type":"string","nullable":true},"status":{"type":"string","enum":["NEW","CONTACTED","QUALIFIED","CONVERTED","DEAD"]},"source":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"NewLead":{"type":"object","required":["businessName"],"properties":{"businessName":{"type":"string"},"contactName":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"source":{"type":"string"}}},"Error":{"type":"object","properties":{"error":{"type":"string"}}}}},"security":[{"bearerAuth":[]}],"paths":{"/api/v1/leads":{"get":{"summary":"List leads","description":"Requires a key with `adminApiAbleToAccessLeadApi`.","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["NEW","CONTACTED","QUALIFIED","CONVERTED","DEAD"]}}],"responses":{"200":{"description":"List of leads","content":{"application/json":{"schema":{"type":"object","properties":{"leads":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}}}}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create a lead","description":"Top-of-funnel intake. Requires a key with `adminApiAbleToAccessLeadApi`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewLead"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"lead":{"$ref":"#/components/schemas/Lead"}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing/invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key lacks permission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/leads/{id}":{"get":{"summary":"Get a lead","description":"Requires `adminApiAbleToAccessLeadApi`.","responses":{"200":{"description":"Lead"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a lead","description":"Requires `adminApiAbleToAccessLeadApi`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a lead","description":"Requires `adminApiAbleToAccessLeadApi`.","responses":{"200":{"description":"Deleted"},"404":{"description":"Not found"}}}},"/api/v1/merchants":{"get":{"summary":"List merchants","description":"Requires `adminApiAbleToAccessApp`. Optional `?q=` filters legal/DBA name.","responses":{"200":{"description":"Merchants"}}},"post":{"summary":"Create a merchant","description":"Requires `adminApiAbleToAccessApp`. Body: { legalName, dbaName?, federalId?, email?, phone?, … }.","responses":{"201":{"description":"Created"},"400":{"description":"Validation error"}}}},"/api/v1/merchants/{id}":{"get":{"summary":"Get a merchant","description":"Requires `adminApiAbleToAccessApp`. Includes contacts.","responses":{"200":{"description":"Merchant"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a merchant","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a merchant","description":"Requires `adminApiAbleToAccessApp`. Blocked if the merchant has deals.","responses":{"200":{"description":"Deleted"},"409":{"description":"Has dependent records"}}}},"/api/v1/deals":{"get":{"summary":"List deals","description":"Requires `adminApiAbleToAccessApp`. Optional `?state=`.","responses":{"200":{"description":"Deals"}}},"post":{"summary":"Create a deal","description":"Requires `adminApiAbleToAccessApp`. Body: { merchantId, productType?, fundedAmount?, factorRate?, paybackAmount?, termDays?, … }.","responses":{"201":{"description":"Created"},"400":{"description":"Validation error"}}}},"/api/v1/deals/{id}":{"get":{"summary":"Get a deal","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Deal"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a deal","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a deal","description":"Requires `adminApiAbleToAccessApp`. Blocked if referenced by submissions/payments.","responses":{"200":{"description":"Deleted"},"409":{"description":"Has dependent records"}}}},"/api/v1/funders":{"get":{"summary":"List funders","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Funders"}}},"post":{"summary":"Create a funder","description":"Requires `adminApiAbleToAccessApp`.","responses":{"201":{"description":"Created"},"400":{"description":"Validation error"}}}},"/api/v1/funders/{id}":{"get":{"summary":"Get a funder","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Funder"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a funder","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a funder","description":"Requires `adminApiAbleToAccessApp`. Blocked if referenced by submissions.","responses":{"200":{"description":"Deleted"},"409":{"description":"Has dependent records"}}}},"/api/v1/isos":{"get":{"summary":"List ISOs","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"ISOs"}}}},"/api/v1/isos/{id}":{"get":{"summary":"Get an ISO","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"ISO"},"404":{"description":"Not found"}}}},"/api/v1/syndicators":{"get":{"summary":"List syndicators","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Syndicators"}}},"post":{"summary":"Create a syndicator","description":"Requires `adminApiAbleToAccessApp`. Body: { name, email?, phone?, contactName?, portfolioId?, … }.","responses":{"201":{"description":"Created"},"400":{"description":"Validation error"}}}},"/api/v1/syndicators/{id}":{"get":{"summary":"Get a syndicator","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Syndicator"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a syndicator","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}},"delete":{"summary":"Delete a syndicator","description":"Requires `adminApiAbleToAccessApp`. Blocked if referenced by other records.","responses":{"200":{"description":"Deleted"},"409":{"description":"Has dependent records"}}}},"/api/v1/payments":{"get":{"summary":"List payments","description":"Requires `adminApiAbleToAccessApp`. Optional `?dealId=` and `?status=`.","responses":{"200":{"description":"Payments"}}},"post":{"summary":"Record a payment","description":"Requires `adminApiAbleToAccessApp`. Body: { dealId, amount, type?, status?, … }.","responses":{"201":{"description":"Created"},"400":{"description":"Validation error"}}}},"/api/v1/payments/{id}":{"get":{"summary":"Get a payment","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Payment"},"404":{"description":"Not found"}}},"patch":{"summary":"Update a payment","description":"Requires `adminApiAbleToAccessApp`.","responses":{"200":{"description":"Updated"},"404":{"description":"Not found"}}}},"/api/v1/submissions":{"get":{"summary":"List submissions","description":"Funder submissions for deals. Requires `adminApiAbleToAccessApp`. Optional `?dealId=` and `?funderId=`. Includes funder, status, and deal.","responses":{"200":{"description":"Submissions"}}}},"/api/v1/decisions":{"get":{"summary":"List underwriting decisions","description":"Decision-engine results (approve / decline / refer with score and category). Requires `adminApiAbleToAccessApp`. Optional `?dealId=`.","responses":{"200":{"description":"Decision results"}}}},"/api/v1/renewals":{"get":{"summary":"List renewal opportunities","description":"Paid-down deals eligible to renew. Requires `adminApiAbleToAccessApp`. Optional `?status=` (ELIGIBLE | CONTACTED | RENEWED | DISMISSED). Includes the prior deal.","responses":{"200":{"description":"Renewal opportunities"}}}},"/api/v1/credit-facilities":{"get":{"summary":"List lines of credit","description":"Revolving credit facilities with their draws. Requires `adminApiAbleToAccessApp`. Optional `?status=` (ACTIVE | SUSPENDED | CLOSED).","responses":{"200":{"description":"Credit facilities"}}}},"/api/v1/disclosures":{"get":{"summary":"List disclosures","description":"Commercial-financing disclosures. Requires `adminApiAbleToAccessApp`. Optional `?dealId=`, `?state=`, `?status=` (DRAFT | DELIVERED | SIGNED | SUPERSEDED).","responses":{"200":{"description":"Disclosures"}}}},"/api/v1/ucc-filings":{"get":{"summary":"List UCC filings","description":"UCC-1 lien filings. Requires `adminApiAbleToAccessApp`. Optional `?dealId=`, `?status=` (DRAFT | SUBMITTED | ACCEPTED | REJECTED | LAPSED | TERMINATED).","responses":{"200":{"description":"UCC filings"}}}},"/api/v1/payouts":{"get":{"summary":"List payout batches","description":"Commission and participation payout batches with line items. Requires `adminApiAbleToAccessApp`. Optional `?kind=` (COMMISSION | PARTICIPATION), `?status=` (DRAFT | APPROVED | PAID | PARTIAL).","responses":{"200":{"description":"Payout batches"}}}},"/api/v1/applications":{"get":{"summary":"List application submissions","description":"Online application-form submissions. Requires `adminApiAbleToAccessApp`. Optional `?status=` (RECEIVED | REVIEWED | CONVERTED | SPAM), `?formId=`. Includes the form.","responses":{"200":{"description":"Application submissions"}}}},"/api/v1/communications":{"get":{"summary":"List communications","description":"Unified call/SMS contact-center log. Requires `adminApiAbleToAccessApp`. Optional `?merchantId=`, `?dealId=`, `?channel=` (CALL | SMS).","responses":{"200":{"description":"Communications"}}}}}}