API Reference

Revos billing external API — execute standard MFlows by slug with start-node payloads.

API Reference

Revos exposes standard billing MFlows as REST endpoints. Each flow is addressed by a readable slug (for example billing/account/create) and accepts a JSON body that matches the flow start node inputSchema.

Base URL

https://{your-tenant-host}/api/v1/external

Use your Monetize360 tenant API host — the same host used for Mbrix workflow and MObject APIs.

Authentication

All requests require a Bearer token:

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://YOUR_TENANT_HOST/api/v1/external/api-contract/3c421433-a8ca-4169-a1b6-2273599ff632

Request payload

The JSON body for POST /api/v1/external/run/{slug} is the start node input for that MFlow.

  • Schema source: inputSchema on the flow start node in the active published version
  • Field names are case-sensitive and must match the start node exactly
  • Picklist, lookup (reference), and date values are resolved by the platform before downstream steps run
  • Platform audit fields (created_at, updated_at, etc.) are not part of the external payload

Endpoints

Get API contract

Retrieve the start-node request schema for a flow by its ID:

GET /api/v1/external/api-contract/{flowId}
Authorization: Bearer YOUR_API_TOKEN

Example

curl -sS "https://YOUR_TENANT_HOST/api/v1/external/api-contract/3c421433-a8ca-4169-a1b6-2273599ff632" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

{
  "flowId": "3c421433-a8ca-4169-a1b6-2273599ff632",
  "flowName": "Onboarding Flow",
  "description": null,
  "endpoint": {
    "method": "POST",
    "path": "/api/v1/external/run/billing/account/create",
    "urlTemplate": "https://YOUR_TENANT_HOST/api/v1/external/run/billing/account/create",
    "headers": {
      "Content-Type": "application/json",
      "Accept": "application/json",
      "Authorization": "Bearer Token"
    },
    "contentType": "application/json"
  },
  "requestBody": {
    "type": "object",
    "properties": {
      "Company_Name": { "type": "string", "title": "Company Name" },
      "City": { "type": "string", "title": "City" }
    }
  },
  "requiredFields": ["Company_Name", "City", "Line1", "State", "Country", "Currency", "Zip_Code", "First_Name", "Last_Name"],
  "optionalFields": ["Name", "Line2", "ExternalId"]
}
FieldDescription
requestBodyJSON Schema from the flow start node inputSchema
requiredFieldsFields you must include in the POST body
optionalFieldsFields you may omit
endpoint.pathSlug URL to execute the flow

Execute flow by slug

POST /api/v1/external/run/{slug}
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
Query paramTypeDefaultDescription
draftModebooleanfalseWhen true, saves start-node input to the target MObject without running the full flow

Response

{
  "output": {
    "accountId": "a7872387-889a-461b-8895-33e8590cfe2a"
  },
  "flowExecutionId": "550e8400-e29b-41d4-a716-446655440000"
}
FieldDescription
outputFlow result — shape depends on the flow end node
flowExecutionIdExecution history record for auditing

Standard billing slugs

EntitySlugFlow
Accountbilling/account/createOnboarding Flow
Accountbilling/account/editAccount Edit Flow
Accountbilling/account/deleteAccount Delete Flow
Accountbilling/account/approveAccount Approval
Contractbilling/contract/createContract Save Flow
Contractbilling/contract/editContract Edit Flow
Contractbilling/contract/deleteContract Delete Flow
Contractbilling/contract/approveContract Approval
Servicebilling/service/createService Creation
Servicebilling/service/editService Edit Flow
Servicebilling/service/deleteService Delete Flow
Servicebilling/service/approveService Approval
Servicebilling/service/cloneClone Service Flow
Paymentbilling/payment/createPayment Save Flow
Paymentbilling/payment/editPayment Edit Flow
Paymentbilling/payment/deletePayment Delete Flow

Account

Create account

POST /api/v1/external/run/billing/account/create
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN

Start node fields (required): Company_Name, First_Name, Last_Name, Line1, City, State, Country, Currency, Zip_Code

curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/account/create" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "Company_Name": "Acme Corp",
    "First_Name": "Jane",
    "Last_Name": "Doe",
    "Line1": "100 Main Street",
    "City": "Toronto",
    "State": "ON",
    "Country": "CA",
    "Currency": "USD",
    "Zip_Code": 94105,
    "ExternalId": "EXT-ACME-001"
  }'

Flow ID: 3c421433-a8ca-4169-a1b6-2273599ff632

Edit account

POST /api/v1/external/run/billing/account/edit
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN

Start node fields: id (account UUID) plus any account fields to update. All 33 start-node properties are optional — include only the fields you want to change.

curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/account/edit" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "ACCOUNT_UUID",
    "name": "Acme Corp (Updated)",
    "account_status": "Active",
    "net_term": "Net 30",
    "currency": "USD",
    "description": "Updated billing account"
  }'
FieldTypeDescription
idstringAccount record UUID (identifies the record to update)
namestringAccount name
first_namestringPrimary contact first name
last_namestringPrimary contact last name
account_nostringAccount number
currencyreferenceDefault currency
net_termstringPayment terms
account_statuspicklistAccount status
customer_typepicklistCustomer type
descriptionstringAccount description
external_idstringExternal system identifier

Additional start-node fields include kyc_flag, tax_status, billing_day, invoicing_day, organization, and others. Fetch the full schema with GET /api/v1/external/api-contract/1ed28b28-94fe-4f13-b103-4905d4c5d65c.

Flow ID: 1ed28b28-94fe-4f13-b103-4905d4c5d65c

Delete account

POST /api/v1/external/run/billing/account/delete
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/account/delete" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "ACCOUNT_UUID"}'
FieldTypeDescription
idstringAccount record UUID

Flow ID: 4297c5d9-b240-4323-a7fe-b5d44192f791

Approve account

POST /api/v1/external/run/billing/account/approve
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/account/approve" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ID_Account": "ACCOUNT_UUID"}'
FieldTypeDescription
ID_AccountstringAccount record to approve

Flow ID: fbccd33f-e665-4cf8-a186-f9f3044921c0


Contract

Create contract

POST /api/v1/external/run/billing/contract/create
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/contract/create" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Enterprise Agreement 2026",
    "number": "CTR-2026-001",
    "master_account_id": "ACCOUNT_UUID",
    "start_date": "2026-01-01",
    "end_date": "2026-12-31",
    "currency_id": "CURRENCY_UUID",
    "total_price": 120000,
    "description": "Annual enterprise contract"
  }'
FieldTypeDescription
namestringContract name
numberstringContract number
master_account_idreferenceBilling account UUID
start_datestringContract start date
end_datestringContract end date
currency_idreferenceCurrency lookup UUID
total_pricenumberTotal contract value

Flow ID: 11f7c0e0-c4fc-482e-b8ff-e870f8298aa1

Edit contract

POST /api/v1/external/run/billing/contract/edit
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/contract/edit" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "CONTRACT_UUID",
    "name": "Enterprise Agreement 2026 (revised)",
    "total_price": 135000
  }'

Flow ID: 6a6064c6-8848-48f3-984c-4007bd1eb281

Delete contract

POST /api/v1/external/run/billing/contract/delete
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/contract/delete" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "CONTRACT_UUID"}'

Flow ID: 26e974eb-08e4-4834-91ed-5e059c2f89eb

Approve contract

POST /api/v1/external/run/billing/contract/approve
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/contract/approve" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ID_Contract": "CONTRACT_UUID"}'

Flow ID: e8961063-aaea-491e-aa3f-8335c1993e1f


Service

Create service

POST /api/v1/external/run/billing/service/create
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/service/create" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Platform Subscription",
    "label": "Platform Subscription",
    "code": "SVC-PLATFORM",
    "currency_id": "CURRENCY_UUID",
    "service_type": "Subscription",
    "billing_frequency": "Monthly",
    "charge_frequency": "Monthly",
    "description": "Core platform access"
  }'
FieldTypeDescription
namestringInternal service name
labelstringDisplay name
codestringService code
currency_idreferenceCurrency lookup UUID
service_typepicklistService type
billing_frequencypicklistBilling frequency
charge_frequencypicklistCharge frequency

Flow ID: d4aa09ee-3a95-481c-b59c-5d486bbebcab

Edit service

POST /api/v1/external/run/billing/service/edit
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/service/edit" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "SERVICE_UUID",
    "label": "Platform Subscription Plus",
    "description": "Updated description"
  }'

Flow ID: ed057223-9e1b-423c-87b4-514746f6b61a

Delete service

POST /api/v1/external/run/billing/service/delete
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/service/delete" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "SERVICE_UUID"}'

Flow ID: 9f097fdf-3d40-4629-b447-a0bf83d64ec3

Approve service

POST /api/v1/external/run/billing/service/approve
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/service/approve" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ID_Service": "SERVICE_UUID"}'

Flow ID: c5b0ed0c-c63c-4659-9879-84bb11f394fb

Clone service

POST /api/v1/external/run/billing/service/clone
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/service/clone" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"Service_ID": "SERVICE_UUID"}'
FieldTypeDescription
Service_IDreferenceSource service to clone

Flow ID: 4ce5dd4a-e25c-40e6-951e-26d7d75fc81f


Payment

Create payment

POST /api/v1/external/run/billing/payment/create
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/payment/create" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "ACCOUNT_UUID",
    "amount": 5000.00,
    "currency_id": "CURRENCY_UUID",
    "payment_date": "2026-07-01",
    "payment_method": "Wire Transfer",
    "payment_status": "Completed",
    "payment_reference": "PAY-2026-001"
  }'
FieldTypeDescription
account_idreferenceBilling account UUID
amountnumberPayment amount
currency_idreferenceCurrency lookup UUID
payment_datestringPayment date
payment_methodpicklistPayment method
payment_statuspicklistPayment status
payment_referencestringExternal reference

Flow ID: ef5e4431-5c80-48e3-8485-cdc47af869e2

Edit payment

POST /api/v1/external/run/billing/payment/edit
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/payment/edit" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "PAYMENT_UUID",
    "amount": 5500.00,
    "comments": "Adjusted amount"
  }'

Flow ID: 1625fa66-8527-46ef-a658-15146df47852

Delete payment

POST /api/v1/external/run/billing/payment/delete
curl -sS -X POST "https://YOUR_TENANT_HOST/api/v1/external/run/billing/payment/delete" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": "PAYMENT_UUID"}'
FieldTypeDescription
idstringPayment record UUID

Flow ID: 82a0e91b-c9c7-4536-85dd-e1a4864335d3


Contract 360 UI dependencies

The Contract 360 layout (97ea5833-4391-4069-b73c-3fc82dc54654) is a mixed layout on the Contract MObject. It does not call external slug APIs directly. Dependency resolution from the layout resolves:

ResourceIDPurpose
Contract 360 layout97ea5833-4391-4069-b73c-3fc82dc54654Contract header fields + embedded grid
ContractServices Grid39fe6660-a18e-45b2-af39-decfb6383d17Child grid filtered by contract_id
ContractServices Save Flow198017dc-7955-4fd4-8f9e-2d0b7010adb1Grid action: Create Service (FORM)
ContractServices Edit Flowe6c38246-5476-4f57-8e0b-0d98bef380feGrid action: Edit (FORM)
ContractServices Delete Flowb6044294-8515-40a9-91bd-a814cd87dff7Grid action: Delete (FLOW)

Create Service runs the native function AddServiceToQ2CEntityFunc, which creates a ContractServices record, dimensions, account shares, and copies the Service price matrix into ContractServicePriceMatrix. These UI flows have no external slug — use the platform REST APIs below for programmatic access.


Service 360 UI dependencies

The Service 360 layout (8c3dfee7-d0fd-4f64-8f77-a838075bd805) is a horizontal tabbed layout on the Service MObject. Dependency resolution from the layout resolves four tabs:

TabTypeResource / APIPurpose
AttributesMDATA_GRIDService Dimensions Grid e0392561-5c2c-46d6-9881-ddd33c2a8b40Child grid filtered by service lookup
Rate CardSTANDARD_LAYOUTPRICE_MATRIX/api/service-price-matrixCatalog pricing rows per currency
Pricing LogicSTANDARD_LAYOUTEXPRESSION/api/rate-computationMAPL rate computation scripts
Estimation LayoutSTANDARD_LAYOUTLAYOUT_CONFIGURATION/api/v1/service-layout/{serviceId}Estimator form layout JSON

Attributes tab — ServiceDimension grid actions

ActionFlowIDTrigger
CreateServiceDimension Save Flow804e03ab-3072-4494-99d3-a7f360c9cbceFORM (HEADER)
EditServiceDimension Edit Flow4d851b6b-c104-4f47-b0c6-5c75882aa9f5FORM (ROW)
DeleteServiceDimension Delete Flow691040e0-aa31-44f4-8be2-397f5f573a4dFLOW (ROW)

Save and Edit flows use JavaScriptFunc plus InsertMDataFunc to persist ServiceDimension rows. Delete uses DeleteMDataFunc. These are UI flows with no external slug.

The Service Grid drill-down on Service 360 uses layout ID 8c3dfee7-d0fd-4f64-8f77-a838075bd805.


Platform REST APIs

These endpoints complement the slug-based external flow API. They are used by Contract 360, Service 360, and integration clients.

Q2C entity services (contract services)

Manage services attached to a contract (same backend path used by Contract 360 Create Service):

POST /api/q2c-entity-services/CONTRACT
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
curl -sS -X POST "https://YOUR_TENANT_HOST/api/q2c-entity-services/CONTRACT" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "parentId": "CONTRACT_UUID",
    "serviceId": "SERVICE_UUID",
    "startDate": "2026-01-01",
    "endDate": "2026-12-31",
    "billAccountShares": {},
    "dimensionValues": {}
  }'
FieldTypeRequiredDescription
parentIdUUIDYesContract ID
serviceIdUUIDYesCatalog service to attach
startDatedateYesContract service start date
endDatedateYesContract service end date
billAccountSharesobjectNoMap of account UUID → share
dimensionValuesobjectNoMap of dimension name → value
chargeFrequencyUUIDNoOverrides service default
billingFrequencyUUIDNoOverrides service default
subscriptionChargeTypeUUIDNoOverrides service default

Update a contract service:

PUT /api/q2c-entity-services/CONTRACT/{contractServiceId}

Delete a contract service (and dimensions):

DELETE /api/q2c-entity-services/CONTRACT/{contractServiceId}

List services on a contract:

GET /api/q2c-entity-services/CONTRACT/parent/{contractId}

Service price matrix

Used by Service 360 → Rate Card tab and when seeding contract-service pricing on create.

Get price matrix for a service and currency:

GET /api/service-price-matrix/{serviceId}?currencyId={currencyId}
Authorization: Bearer YOUR_API_TOKEN

Create price matrix rows:

POST /api/service-price-matrix/insert
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
curl -sS -X POST "https://YOUR_TENANT_HOST/api/service-price-matrix/insert" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "serviceId": "SERVICE_UUID",
    "currencyId": "CURRENCY_UUID",
    "priceMatrixRows": [
      {
        "priceDimId": "DIMENSION_UUID",
        "label": "Base rate",
        "priceMethod": "FLAT",
        "flatRate": 100.00
      }
    ]
  }'

Update (replace strategy — deletes existing rows for the currency, then inserts):

PUT /api/service-price-matrix/update

List all currencies with a matrix for a service:

GET /api/service-price-matrix/currencies?serviceId={serviceId}

Contract service price matrix

Manage exception pricing on a contract service (after the service is attached to a contract):

Get matrix for a contract service:

GET /api/service-price-matrix/contract/{contractServiceId}?currencyId={currencyId}
Authorization: Bearer YOUR_API_TOKEN

Create:

POST /api/service-price-matrix/contract/insert
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
curl -sS -X POST "https://YOUR_TENANT_HOST/api/service-price-matrix/contract/insert" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "contractSvcId": "CONTRACT_SERVICE_UUID",
    "currencyId": "CURRENCY_UUID",
    "priceMatrixRows": [
      {
        "priceDimId": "CONTRACT_DIMENSION_UUID",
        "label": "Contract override",
        "priceMethod": "FLAT",
        "flatRate": 85.00
      }
    ]
  }'

Update:

PUT /api/service-price-matrix/contract/update

Copy catalog service pricing onto a contract service:

POST /api/service-price-matrix/contract/copy-from-service
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
curl -sS -X POST "https://YOUR_TENANT_HOST/api/service-price-matrix/contract/copy-from-service" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "q2cEntityServiceId": "CONTRACT_SERVICE_UUID",
    "sourceServiceId": "SERVICE_UUID",
    "currencyId": "CURRENCY_UUID"
  }'
FieldTypeDescription
q2cEntityServiceIdUUIDTarget contract service
sourceServiceIdUUIDCatalog service to copy from
currencyIdUUIDCurrency for the matrix copy

Service rate computation (pricing logic)

Used by Service 360 → Pricing Logic tab. Manages ServiceRateComputation MAPL expression chains.

Get computations for a service:

GET /api/rate-computation/service/{serviceId}/all
Authorization: Bearer YOUR_API_TOKEN

Create a computation step:

POST /api/rate-computation
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN
curl -sS -X POST "https://YOUR_TENANT_HOST/api/rate-computation" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "serviceId": "SERVICE_UUID",
    "name": "Base price logic",
    "seqNo": 1,
    "expressionList": {
      "exprList": [],
      "computationOutput": {}
    }
  }'
FieldTypeRequiredDescription
serviceIdUUIDYesService the computation belongs to
namestringYesComputation step name
seqNointegerYesExecution order
expressionListobjectYesMAPL expression list and output field mappings

Update:

PUT /api/rate-computation/{computationId}

Delete one computation:

DELETE /api/rate-computation/{computationId}

Validate all scripts for a service:

GET /api/rate-computation/service/{serviceId}/validate

Service estimation layout

Used by Service 360 → Estimation Layout tab. Stores the estimator form definition on the service record.

Get layout:

GET /api/v1/service-layout/{serviceId}
Authorization: Bearer YOUR_API_TOKEN

Save layout:

PUT /api/v1/service-layout/{serviceId}
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN

The body is the MTZ builder layout JSON (groups, fields, criteria logic) used to render the price estimator preview.


Draft mode

Validate and persist start-node input without executing downstream steps:

POST /api/v1/external/run/billing/contract/create?draftMode=true
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKEN

{
  "name": "Draft Contract",
  "master_account_id": "ACCOUNT_UUID"
}

Error handling

HTTP codeMeaning
200Flow executed successfully
400Invalid payload or missing start node schema
401Missing or invalid Bearer token
404Flow not found for slug or flow ID
500Execution error inside the flow

Errors return platform exception details in the response body. Check flowExecutionId in successful responses to trace execution history in Monetize360.

Discovering fields at runtime

For the authoritative field list on your tenant (including any customizations to published flows), always call:

GET /api/v1/external/api-contract/{flowId}

The requestBody, requiredFields, and optionalFields in that response are derived from the same start node inputSchema shown in the examples above.