There are three supported ways:
Edit one call in Reporting
Use the public API (one call or many)
Send Support a file to apply for you
Do not mix these on the same batch without agreeing who owns the write.
What you are changing
Field | Meaning |
Revenue ( | Amount credited on the call as buyer / account revenue |
Publisher payout ( | Amount paid to the publisher on that call |
Amounts are new dollar values, not “add this much.” Sending 25.50 sets the call to $25.50, it does not add $25.50 on top of what is already there.
To clear a conversion / paid amount, set the field to 0.
Option 1 — Edit one call in Reporting
Best for a handful of calls.
Open Reporting → Call Logs (the call log table).
Find the call (phone number, date, campaign, or Call ID).
Open the call and choose Edit.
Enter the new Revenue and Publisher payout.
Save.
Both amounts are required on this edit. If you only need to change revenue, re-enter the current publisher payout (and the reverse).
Confirm the row in the table after save. If the table still shows the old dollars, refresh; totals on summary views can lag the row you just edited.
Option 2 — Public API
Best for scripts, buyer billable files, or hundreds of IDs.
Auth
In the portal: Admin → My account → Moja API.
Generate or copy your organization API key once. Store it privately.
Call
https://external-api.moja-ai.comonly.
Do not send this key to portal.moja-ai.com data routes — those expect a logged-in browser session, not the org key.
Header (either form):
X-API-Key: YOUR_ORG_API_KEY
or
Authorization: Bearer YOUR_ORG_API_KEY
Interactive reference: https://external-api.moja-ai.com/api/v1/docs
Look up call IDs
POST https://external-api.moja-ai.com/api/v1/reporting/calls/query
Use the id values from that response as call_log_ids. Those are Moja call log IDs, not publisher ping IDs and not phone numbers.
Bulk-set the same dollars on many calls
POST https://external-api.moja-ai.com/api/v1/reporting/calls/payout/bulk-adjust
{ "call_log_ids": ["cl_…", "cl_…"], "revenue_paid_out": 25.50, "publisher_paid_out": 20.40}Rules:
Provide at least one of
revenue_paid_outorpublisher_paid_out.Every ID in the request gets the same amount(s). Different dollar amounts need separate requests.
Maximum 500 IDs per request (use ~100 if you want easier retries).
Repeating the same request with unchanged amounts is safe.
Treat success as HTTP 200 and
updated_countequal to the number of IDs you sent and an emptyfailed_call_log_ids.updated_count: 0means nothing changed — stop and check IDs / key / org.
Ongoing buyer postbacks (not a one-off edit)
To have your buyer push revenue after the call:
Configure an incoming webhook of type update revenue (or update fields).
Identify the call with
call_log_idorphone_number. Do not sendcaller_idas the match key — it will not resolve the call.See Revenue Postback Endpoint Guide for the live webhook URL, auth, and payload.
update_revenue can send revenue_paid_out only. Dynamic publisher share, if snapshotted on the call, may recalculate unless you also send publisher_paid_out.
Option 3 — Send Support a file
Best when you have a buyer invoice / billable-call export and do not want to run the API yourself.
Email Support (or in-app chat) with a spreadsheet (CSV or XLSX) and the identity of the account.
Required on every row
Column | Required | Notes |
Call log ID or Phone number | Yes — one of these | Call log ID is preferred. Phone must be full E.164 ( |
Revenue | Yes | Buyer-billable dollars for that call (two decimal places) |
Publisher payout | Yes unless you tell us to derive it | If omitted, say the rule in the email (for example “80% of revenue, rounded half-up”) |
Call time | Strongly recommended | Wall-clock time + timezone. Needed when matching by phone (redials). |
Campaign name | Strongly recommended | Stops the same phone on another offer from taking the dollars |
Buyer name | Recommended | Same phone can route to more than one buyer |
Required in the email (not only in the sheet)
Organization / account name as it appears in Moja
Date range covered
Whether amounts are replacements (default) or you believe they are already correct and this is a check
What to do with unmatched rows (hold vs skip)
What to do with duplicate phones on the same day
We will not apply until you confirm a plan
Support matches rows to existing call logs, then sends a before / after plan:
adjust
already matches
hold (duplicate phone, two possible calls, wrong buyer, unmatched)
No new call logs are created to “make the file post.” Unmatched stays unmatched.
Quick chooser
Situation | Use |
1–20 obvious calls | Reporting → Call Logs → Edit |
Recurring buyer postback | Incoming update revenue / update fields webhook |
Script or hundreds of known IDs |
|
Buyer CSV / invoice, no engineering | Spreadsheet to Support with the columns above |
Common mistakes
Using
caller_idinstead ofphone_numberorcall_log_idon webhooks and support filesSending the org API key to the portal host
Putting mixed dollar amounts in one bulk request
Treating HTTP 200 as success when
updated_countis 0Editing live / in-progress calls for publisher payout (complete the call first)
