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/externalUse 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-2273599ff632Request payload
The JSON body for POST /api/v1/external/run/{slug} is the start node input for that MFlow.
- Schema source:
inputSchemaon 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_TOKENExample
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"]
}| Field | Description |
|---|---|
requestBody | JSON Schema from the flow start node inputSchema |
requiredFields | Fields you must include in the POST body |
optionalFields | Fields you may omit |
endpoint.path | Slug 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 param | Type | Default | Description |
|---|---|---|---|
draftMode | boolean | false | When 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"
}| Field | Description |
|---|---|
output | Flow result — shape depends on the flow end node |
flowExecutionId | Execution history record for auditing |
Standard billing slugs
| Entity | Slug | Flow |
|---|---|---|
| Account | billing/account/create | Onboarding Flow |
| Account | billing/account/edit | Account Edit Flow |
| Account | billing/account/delete | Account Delete Flow |
| Account | billing/account/approve | Account Approval |
| Contract | billing/contract/create | Contract Save Flow |
| Contract | billing/contract/edit | Contract Edit Flow |
| Contract | billing/contract/delete | Contract Delete Flow |
| Contract | billing/contract/approve | Contract Approval |
| Service | billing/service/create | Service Creation |
| Service | billing/service/edit | Service Edit Flow |
| Service | billing/service/delete | Service Delete Flow |
| Service | billing/service/approve | Service Approval |
| Service | billing/service/clone | Clone Service Flow |
| Payment | billing/payment/create | Payment Save Flow |
| Payment | billing/payment/edit | Payment Edit Flow |
| Payment | billing/payment/delete | Payment Delete Flow |
Account
Create account
POST /api/v1/external/run/billing/account/create
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENStart 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_TOKENStart 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"
}'| Field | Type | Description |
|---|---|---|
id | string | Account record UUID (identifies the record to update) |
name | string | Account name |
first_name | string | Primary contact first name |
last_name | string | Primary contact last name |
account_no | string | Account number |
currency | reference | Default currency |
net_term | string | Payment terms |
account_status | picklist | Account status |
customer_type | picklist | Customer type |
description | string | Account description |
external_id | string | External 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/deletecurl -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"}'| Field | Type | Description |
|---|---|---|
id | string | Account record UUID |
Flow ID: 4297c5d9-b240-4323-a7fe-b5d44192f791
Approve account
POST /api/v1/external/run/billing/account/approvecurl -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"}'| Field | Type | Description |
|---|---|---|
ID_Account | string | Account record to approve |
Flow ID: fbccd33f-e665-4cf8-a186-f9f3044921c0
Contract
Create contract
POST /api/v1/external/run/billing/contract/createcurl -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"
}'| Field | Type | Description |
|---|---|---|
name | string | Contract name |
number | string | Contract number |
master_account_id | reference | Billing account UUID |
start_date | string | Contract start date |
end_date | string | Contract end date |
currency_id | reference | Currency lookup UUID |
total_price | number | Total contract value |
Flow ID: 11f7c0e0-c4fc-482e-b8ff-e870f8298aa1
Edit contract
POST /api/v1/external/run/billing/contract/editcurl -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/deletecurl -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/approvecurl -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/createcurl -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"
}'| Field | Type | Description |
|---|---|---|
name | string | Internal service name |
label | string | Display name |
code | string | Service code |
currency_id | reference | Currency lookup UUID |
service_type | picklist | Service type |
billing_frequency | picklist | Billing frequency |
charge_frequency | picklist | Charge frequency |
Flow ID: d4aa09ee-3a95-481c-b59c-5d486bbebcab
Edit service
POST /api/v1/external/run/billing/service/editcurl -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/deletecurl -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/approvecurl -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/clonecurl -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"}'| Field | Type | Description |
|---|---|---|
Service_ID | reference | Source service to clone |
Flow ID: 4ce5dd4a-e25c-40e6-951e-26d7d75fc81f
Payment
Create payment
POST /api/v1/external/run/billing/payment/createcurl -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"
}'| Field | Type | Description |
|---|---|---|
account_id | reference | Billing account UUID |
amount | number | Payment amount |
currency_id | reference | Currency lookup UUID |
payment_date | string | Payment date |
payment_method | picklist | Payment method |
payment_status | picklist | Payment status |
payment_reference | string | External reference |
Flow ID: ef5e4431-5c80-48e3-8485-cdc47af869e2
Edit payment
POST /api/v1/external/run/billing/payment/editcurl -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/deletecurl -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"}'| Field | Type | Description |
|---|---|---|
id | string | Payment 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:
| Resource | ID | Purpose |
|---|---|---|
| Contract 360 layout | 97ea5833-4391-4069-b73c-3fc82dc54654 | Contract header fields + embedded grid |
| ContractServices Grid | 39fe6660-a18e-45b2-af39-decfb6383d17 | Child grid filtered by contract_id |
| ContractServices Save Flow | 198017dc-7955-4fd4-8f9e-2d0b7010adb1 | Grid action: Create Service (FORM) |
| ContractServices Edit Flow | e6c38246-5476-4f57-8e0b-0d98bef380fe | Grid action: Edit (FORM) |
| ContractServices Delete Flow | b6044294-8515-40a9-91bd-a814cd87dff7 | Grid 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:
| Tab | Type | Resource / API | Purpose |
|---|---|---|---|
| Attributes | MDATA_GRID | Service Dimensions Grid e0392561-5c2c-46d6-9881-ddd33c2a8b40 | Child grid filtered by service lookup |
| Rate Card | STANDARD_LAYOUT → PRICE_MATRIX | /api/service-price-matrix | Catalog pricing rows per currency |
| Pricing Logic | STANDARD_LAYOUT → EXPRESSION | /api/rate-computation | MAPL rate computation scripts |
| Estimation Layout | STANDARD_LAYOUT → LAYOUT_CONFIGURATION | /api/v1/service-layout/{serviceId} | Estimator form layout JSON |
Attributes tab — ServiceDimension grid actions
| Action | Flow | ID | Trigger |
|---|---|---|---|
| Create | ServiceDimension Save Flow | 804e03ab-3072-4494-99d3-a7f360c9cbce | FORM (HEADER) |
| Edit | ServiceDimension Edit Flow | 4d851b6b-c104-4f47-b0c6-5c75882aa9f5 | FORM (ROW) |
| Delete | ServiceDimension Delete Flow | 691040e0-aa31-44f4-8be2-397f5f573a4d | FLOW (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_TOKENcurl -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": {}
}'| Field | Type | Required | Description |
|---|---|---|---|
parentId | UUID | Yes | Contract ID |
serviceId | UUID | Yes | Catalog service to attach |
startDate | date | Yes | Contract service start date |
endDate | date | Yes | Contract service end date |
billAccountShares | object | No | Map of account UUID → share |
dimensionValues | object | No | Map of dimension name → value |
chargeFrequency | UUID | No | Overrides service default |
billingFrequency | UUID | No | Overrides service default |
subscriptionChargeType | UUID | No | Overrides 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_TOKENCreate price matrix rows:
POST /api/service-price-matrix/insert
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENcurl -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/updateList 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_TOKENCreate:
POST /api/service-price-matrix/contract/insert
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENcurl -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/updateCopy catalog service pricing onto a contract service:
POST /api/service-price-matrix/contract/copy-from-service
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENcurl -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"
}'| Field | Type | Description |
|---|---|---|
q2cEntityServiceId | UUID | Target contract service |
sourceServiceId | UUID | Catalog service to copy from |
currencyId | UUID | Currency 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_TOKENCreate a computation step:
POST /api/rate-computation
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENcurl -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": {}
}
}'| Field | Type | Required | Description |
|---|---|---|---|
serviceId | UUID | Yes | Service the computation belongs to |
name | string | Yes | Computation step name |
seqNo | integer | Yes | Execution order |
expressionList | object | Yes | MAPL 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}/validateService 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_TOKENSave layout:
PUT /api/v1/service-layout/{serviceId}
Content-Type: application/json
Authorization: Bearer YOUR_API_TOKENThe 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 code | Meaning |
|---|---|
| 200 | Flow executed successfully |
| 400 | Invalid payload or missing start node schema |
| 401 | Missing or invalid Bearer token |
| 404 | Flow not found for slug or flow ID |
| 500 | Execution 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.