1. DG
Dialgood
  • DG
    • Partner API
    • Call Control
      • Mute an active call
      • Unmute an active call
      • Clear Outbound Call Queue
      • Message Announcement
    • Live Status
      • Get transcript and transcript entries for a campaign
      • Get normalized call status and CDR details for a campaign
    • Voices
      • List available voices with optional filters and pagination
    • Calls
      • Place Outbound Call
      • Get Live Call Transcript
      • Get Call Transcript
      • Get Call Records
      • Get Call Recording
    • Agents
      • Get Agents
  • Schemas
    • Sample Schemas
      • Pet
      • Category
      • Tag
    • outbound body
    • ErrorResponse
    • ProxyControlRequestBody
    • ProxyControlResponse
    • LiveTranscriptEntry
    • LiveTranscriptResponse
    • CdrStatusResponse
    • VoiceLabels
    • Voice
    • VoicesPaginatedResponse
  1. DG

Partner API

Dialgood Partner Agent API#

Use the Partner Agent API to manage Dialgood agents from a partner dashboard. Partner requests act on behalf of the Dialgood user associated with the supplied API key, and agent creates and updates follow the same save/version behavior as the Dialgood dashboard.
The main write path is the version-managed agent update endpoint: PUT /agents/{agentId} for complete agent publishes and PATCH /agents/{agentId} for partial top-level amendments. Both methods follow the same save/version behavior as the Dialgood dashboard. Focused settings and credential endpoints are available for narrower updates.

Base URL#

https://api.dialgood.com/partner/v1
All paths in this document are relative to that base URL.

Access#

Partner API access must be enabled for the Dialgood user before requests will succeed. Contact Dialgood if an API key returns 403.

Authentication#

Send the Dialgood user API key in the api_token header.
Query-string authentication is also supported for compatibility, but header authentication is recommended.

Request Format#

Request bodies are JSON unless otherwise noted.
Agent reads and writes are scoped to the authenticated Dialgood user.
If an agent does not belong to the authenticated user, the API returns 404.
Complete agent publishes should use dashboard-shaped fields such as agentName, design, settings, metadata, and phoneNumbers.
Include metadata.commit_message or metadata.commitMessage when you want a specific version history label.
PUT and PATCH currently use the same top-level merge behavior. Omitted top-level fields are preserved by both methods.
Nested objects included in the request, such as settings, design, or metadata, replace the stored value for that top-level field. Send the complete intended value of every nested object you include.
Credential values must be managed through the credential endpoints so they are handled securely.
Do not send masked credential entries returned by a general agent read back through the agent update endpoint.

Errors#

Error responses use this shape:
{
  "error": "agent not found"
}
StatusMeaning
200Request succeeded.
201Resource was created.
400Request body is malformed or missing required fields.
401API key is missing or invalid.
403Partner API access is disabled or the authenticated user does not have write access to the agent.
404The requested agent or version was not found for this user.
500Unexpected server error.

Voices#

Use the voice catalog endpoint to list and filter voices available to partner integrations.
Optional query parameters:
ParameterTypeDescription
vendorstringVoice provider. Defaults to elevenlabs; supported values are elevenlabs, deepgram, whisper, microsoft, google, and cartesia.
pagenumberPage number. Defaults to 1.
limitnumberVoices per page. Defaults to 100.
genderstringFilter voices by gender.
accentstringFilter voices by accent.
namestringFilter voices by a case-insensitive partial name match.
The /voices catalog endpoint currently returns elevenlabs, deepgram, whisper, microsoft, google, and cartesia voices. Agent updates also accept existing Rime voice IDs, but Rime is not currently listed by this endpoint.
Example:

Agents#

Agent creates and updates are version-managed like Dialgood dashboard saves. A successful write updates the live agent and creates the corresponding version record.
If a Dialgood dashboard edit changes the agent, send the resulting dashboard-shaped agent fields through PATCH /agents/{agentId} or the relevant focused wrapper.
Agent reads include agents owned by the authenticated Dialgood user and agents shared with that user's email address. Shared agents include owner: false, their rights array, and sharing metadata. Owned agents include owner: true.
Shared agents are readable through GET /agents/{agentId}, settings reads, version reads, and call-log reads. Write routes require either ownership or the shared agents right. Credential reads also require agent-control access because they return secret values. Shared agents cannot be deleted through the Partner API.

List Agents#

Optional query parameters:
ParameterTypeDescription
limitnumberMaximum number of agents to return. Defaults to 25.
skipnumberNumber of agents to skip. Defaults to 0.
Example:
Response:
{
  "agents": [
    {
      "agentId": "agent_123",
      "agentName": "Support Agent",
      "userId": "dialgood_user_123",
      "owner": true,
      "settings": {},
      "phoneNumbers": [],
      "metadata": {},
      "updated_at": "2026-05-24T00:00:00.000Z"
    },
    {
      "agentId": "agent_456",
      "agentName": "Shared Sales Agent",
      "userId": "owner_user_456",
      "owner": false,
      "rights": ["view"],
      "settings": {},
      "phoneNumbers": [],
      "metadata": {
        "sharedByEmail": "owner@example.com",
        "sharedByName": "Owner User",
        "sharedAt": "2026-05-24T00:00:00.000Z"
      },
      "updated_at": "2026-05-24T00:00:00.000Z"
    }
  ],
  "totalCount": 2,
  "limit": 25,
  "skip": 0,
  "hasMore": false
}

Create Agent#

Example request:
{
  "agentName": "Support Agent",
  "settings": {
    "language": "en"
  },
  "phoneNumbers": [],
  "metadata": {
    "commit_message": "Initial partner setup"
  }
}
Response:
{
  "agent": {
    "agentId": "agent_123",
    "agentName": "Support Agent",
    "userId": "dialgood_user_123",
    "settings": {},
    "phoneNumbers": []
  }
}

Get Agent#

Response:
{
  "agent": {
    "agentId": "agent_123",
    "agentName": "Support Agent",
    "userId": "dialgood_user_123",
    "settings": {},
    "phoneNumbers": []
  }
}
Credential values are not returned in the general agent response.

Clone Agent#

Creates a new agent owned by the authenticated Dialgood user by copying an existing writable agent. The clone receives a fresh agentId, records a new agent version, and preserves the source agent's configuration. Use request body fields to override editable top-level fields such as agentName or metadata.
The source agent must be owned by the authenticated user or shared with the agents right. Protected fields such as agentId, userId, owner, rights, and timestamps are ignored.
Example request:
{
  "agentName": "Support Agent Copy",
  "metadata": {
    "commit_message": "Partner cloned support agent"
  }
}
Response:
{
  "agent": {
    "agentId": "agent_789",
    "agentName": "Support Agent Copy",
    "userId": "dialgood_user_123",
    "metadata": {
      "clonedFromAgentId": "agent_123"
    }
  }
}
Credential values are not returned in the clone response.

Publish or Update an Agent#

Use PUT when publishing the complete editable agent configuration. Use PATCH when changing selected top-level fields. Both methods immediately update the live agent and automatically create a managed version; there is no separate partner draft state.
For a complete publish, send every editable top-level field in its intended final state. Do not include credential values; use the credential endpoint separately.
Credential preservation: General agent reads return masked credential keys rather than secret values. Do not send this masked data back through the agent update endpoint. When an agent already has credentials, update non-secret settings through PATCH /agents/{agentId}/settings and secret values through the credentials endpoint. Each operation creates a separate managed version.
Complete publish example (the sample intentionally includes every partner-facing skill-action variant documented below; production agents should include only the actions they need):
{
  "agentName": "Australian Support Agent",
  "design": {
    "greeting_message": "Hello, how can I help?",
    "summaryContext": "Summarise the conversation in five concise points.",
    "knowledgebase": {
      "faqs": [],
      "website": [],
      "text": ""
    },
    "skills": [
      {
        "id": "receptionist",
        "name": "Receptionist",
        "context": "Handle incoming customer enquiries.",
        "tasks": [
          "Understand the caller's request",
          "Answer using the supplied knowledge",
          "Use the lookupCustomer tool after the caller provides a customer ID",
          "Use the fetchOrderStatus tool when the caller asks about an order"
        ],
        "rules": [
          "Keep responses concise",
          "Do not invent information"
        ],
        "objectivesString": "Understand the caller's request\nAnswer using the supplied knowledge",
        "guidelinesString": "Keep responses concise\nDo not invent information",
        "utterances": ["Receptionist"],
        "actions": [
          {
            "type": "In Call",
            "action": "Nodejs Function",
            "isActive": true,
            "webhookName": "lookupCustomer",
            "condition": "The caller asks for account details and a customer ID is available.",
            "variableName": "customerLookup",
            "timeoutMs": 3000,
            "invokeTimeoutMs": 4000,
            "allowedHosts": [
              "api.example.com"
            ],
            "input": {
              "baseUrl": "https://api.example.com"
            },
            "metadata": {
              "source": "partner-api"
            },
            "code": "const customerId = entities.customerId || state.customerId;\n\nif (!customerId) {\n  return {\n    _reply: 'Please provide your customer ID.',\n    _mute: true,\n    status: 'missing_customer_id'\n  };\n}\n\nconst response = await http.get(`${input.baseUrl}/customers/${customerId}`);\nconst customer = response.data || response;\nstate.customer = customer;\n\nreturn {\n  status: 'success',\n  customer\n};"
          },
          {
            "type": "Pre Call",
            "action": "Webhook",
            "isActive": true,
            "condition": "Before the call begins.",
            "webhookName": "loadCustomerContext",
            "webhookDescription": "Load customer context before the conversation starts.",
            "webhookVariableName": "customerContext",
            "method": "POST",
            "url": "https://api.example.com/calls/context",
            "headers": [
              {
                "key": "X-Partner-Account",
                "value": "example-account"
              }
            ],
            "body": [
              {
                "key": "source",
                "value": "dialgood"
              }
            ]
          },
          {
            "type": "In Call",
            "action": "Webhook",
            "isActive": true,
            "agentResponse": "Please wait while I check that order.",
            "webhookName": "fetchOrderStatus",
            "webhookDescription": "Retrieve the current status of an order.",
            "webhookVariableName": "orderStatus",
            "method": "GET",
            "url": "https://api.example.com/orders/status",
            "headers": [],
            "body": []
          },
          {
            "type": "Post Call",
            "action": "Webhook",
            "isActive": true,
            "condition": "After every completed call.",
            "webhookName": "publishCallOutcome",
            "webhookDescription": "Publish the final call outcome to the partner system.",
            "webhookVariableName": "publishedOutcome",
            "method": "POST",
            "url": "https://api.example.com/calls/outcome",
            "headers": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": [
              {
                "key": "source",
                "value": "dialgood"
              }
            ]
          },
          {
            "type": "In Call",
            "action": "Transfer Call",
            "isActive": true,
            "condition": "The caller asks to speak with a human.",
            "agentResponse": "I will transfer you to a team member now.",
            "webhookName": "transferToSupport",
            "transferTo": "+61390000001",
            "callerId": "+61390000000",
            "enableFailedTransferConfig": true,
            "failedTransferMessage": "I could not connect the transfer.",
            "failedTransferEndCall": false,
            "enableNoAnswerTransferConfig": true,
            "noAnswerTransferMessage": "The team did not answer, so I can continue helping you.",
            "noAnswerTransferEndCall": false,
            "enableBusyTransferConfig": true,
            "busyTransferMessage": "The team is currently busy, so I can continue helping you.",
            "busyTransferEndCall": false
          }
        ],
        "inbound": true,
        "outbound": false,
        "default": true,
        "isActive": true
      }
    ]
  },
  "settings": {
    "language": "en-AU",
    "timezone": "Australia/Melbourne",
    "general": {},
    "voice": {
      "vendor": "microsoft",
      "voice_id": "microsoft-natasha",
      "language": "en-AU",
      "category": "Neural"
    },
    "raw": {
      "synthesizer": {
        "vendor": "microsoft",
        "voice": "microsoft-natasha",
        "language": "en-AU",
        "engine": "neural"
      },
      "recognizer": {
        "vendor": "deepgram",
        "language": "en-AU",
        "model": "nova-2-phonecall",
        "deepgramOptions": {
          "endpointing": 450,
          "utteranceEndMs": 1000,
          "smartFormatting": true,
          "keywords": []
        }
      }
    },
    "telephony": {
      "timezone": "Australia/Melbourne",
      "model": "nova-2-phonecall",
      "pauseDetectionRange": 450,
      "smart_formatting": true
    }
  },
  "phoneNumbers": [
    "+61390000000"
  ],
  "metadata": {
    "commit_message": "Partner publish: updated greeting, voice, and skill actions",
    "partnerRevision": "revision-482"
  }
}

Skill actions#

Every skill action is an object inside design.skills[].actions. Use the exact, case-sensitive type and action strings shown below.
Dashboard actiontypeactionAction-specific fields
Pre-call WebhookPre CallWebhookcondition, webhookName, webhookVariableName, method, url; optional webhookDescription, headers, and POST body
In-call WebhookIn CallWebhookagentResponse, webhookName, webhookVariableName, method, url; optional webhookDescription, headers, and POST body
Post-call WebhookPost CallWebhookcondition, webhookName, webhookVariableName, method, url; optional webhookDescription, headers, and POST body
Transfer CallIn CallTransfer Callcondition, agentResponse, webhookName, transferTo; optional callerId, SIP credentials, and failed-transfer handling
Cloud Function (js)In CallNodejs Functioncondition, webhookName, code; optional variableName, timeouts, allowedHosts, input, and metadata
All actions accept isActive; set it to false to retain an action without executing it. condition is a natural-language trigger. In-call Webhooks are the exception: the dashboard removes their condition and exposes them to the agent as tools. Mention each in-call Webhook or Cloud Function webhookName in the skill's task prompt so the agent knows when to use it.
Webhook method supports GET and POST. headers and POST body are arrays of { "key": "...", "value": "..." } objects. webhookName, webhookVariableName, method, and url are required for every enabled Webhook. In-call Webhook and Cloud Function tool names must be unique within the skill.
For Transfer Call, transferTo may be an international telephone number or a SIP destination. SIP transfers can also include username and password. The optional failure settings are enableFailedTransferConfig, failedTransferMessage, failedTransferEndCall, enableNoAnswerTransferConfig, noAnswerTransferMessage, noAnswerTransferEndCall, enableBusyTransferConfig, busyTransferMessage, and busyTransferEndCall.
The dashboard limits agentResponse to 150 characters.
Valid action payload examples#
Place any of the following objects inside a skill's actions array.
Pre-call Webhook:
{
  "type": "Pre Call",
  "action": "Webhook",
  "isActive": true,
  "condition": "Before the call begins.",
  "webhookName": "loadCustomerContext",
  "webhookDescription": "Load customer context before the conversation starts.",
  "webhookVariableName": "customerContext",
  "method": "POST",
  "url": "https://api.example.com/calls/context",
  "headers": [
    {
      "key": "X-Partner-Account",
      "value": "example-account"
    }
  ],
  "body": [
    {
      "key": "source",
      "value": "dialgood"
    }
  ]
}
In-call Webhook:
{
  "type": "In Call",
  "action": "Webhook",
  "isActive": true,
  "agentResponse": "Please wait while I check that order.",
  "webhookName": "fetchOrderStatus",
  "webhookDescription": "Retrieve the current status of an order.",
  "webhookVariableName": "orderStatus",
  "method": "GET",
  "url": "https://api.example.com/orders/status",
  "headers": [],
  "body": []
}
Do not add condition to an in-call Webhook. Its webhookName and webhookDescription define the tool exposed to the agent, and agentResponse is spoken while it runs.
Post-call Webhook:
{
  "type": "Post Call",
  "action": "Webhook",
  "isActive": true,
  "condition": "After every completed call.",
  "webhookName": "publishCallOutcome",
  "webhookDescription": "Publish the final call outcome to the partner system.",
  "webhookVariableName": "publishedOutcome",
  "method": "POST",
  "url": "https://api.example.com/calls/outcome",
  "headers": [
    {
      "key": "Content-Type",
      "value": "application/json"
    }
  ],
  "body": [
    {
      "key": "source",
      "value": "dialgood"
    }
  ]
}
Transfer Call:
{
  "type": "In Call",
  "action": "Transfer Call",
  "isActive": true,
  "condition": "The caller asks to speak with a human.",
  "agentResponse": "I will transfer you to a team member now.",
  "webhookName": "transferToSupport",
  "transferTo": "+61390000001",
  "callerId": "+61390000000",
  "enableFailedTransferConfig": true,
  "failedTransferMessage": "I could not connect the transfer.",
  "failedTransferEndCall": false,
  "enableNoAnswerTransferConfig": true,
  "noAnswerTransferMessage": "The team did not answer, so I can continue helping you.",
  "noAnswerTransferEndCall": false,
  "enableBusyTransferConfig": true,
  "busyTransferMessage": "The team is currently busy, so I can continue helping you.",
  "busyTransferEndCall": false
}
Cloud Function (js):
{
  "type": "In Call",
  "action": "Nodejs Function",
  "isActive": true,
  "webhookName": "checkQuote",
  "condition": "The caller asks whether their quote is ready.",
  "variableName": "quoteResult",
  "timeoutMs": 3000,
  "invokeTimeoutMs": 4000,
  "allowedHosts": [],
  "input": {},
  "metadata": {
    "source": "partner-api"
  },
  "code": "state.quoteStatus = 'checked';\n\nreturn {\n  _reply: 'Your quote is ready.',\n  _mute: true,\n  status: 'ready'\n};"
}
Cloud Function fields#
The dashboard label Cloud Function (js) is represented in the API by an action inside design.skills[].actions with the exact values type: "In Call" and action: "Nodejs Function". The function is available only while its containing skill is active. Give the tool a unique webhookName within that skill and mention that name in the skill's task prompt so the agent knows when to invoke it.
FieldRequiredDescription
typeYesMust be In Call for a Cloud Function skill action.
actionYesMust be the exact API value Nodejs Function.
isActiveYesEnables or disables the action.
webhookNameYesTool name exposed to the agent. It must be unique among Cloud Function and in-call Webhook tools in the same skill.
conditionYesNatural-language condition under which the agent may select the tool.
codeYesJavaScript function body. It receives state, entities, transcript, input, metadata, and sandbox HTTP helpers, and must return an object.
variableNameNoCall-state key where the result is saved. Defaults to webhookName.
timeoutMsNoFunction execution timeout in milliseconds. Defaults to 3000.
invokeTimeoutMsNoHow long the backend waits for the invocation. Defaults to timeoutMs + 1000.
allowedHostsNoHostnames the sandbox may call, without paths or protocols. Use an empty array when the function makes no outbound requests.
inputNoStatic JSON object available to the function as input. Defaults to {}.
metadataNoStatic JSON object available to the function as metadata. Defaults to {}.
The function may mutate state to update public call state. A returned _reply is spoken directly, _mute: true skips AI interpretation of that result, and _transfer can request a call transfer. Keep secrets out of code, input, and metadata; these fields are stored as part of the agent configuration and its managed versions.
Example request:
Recognized voice names and vendor-prefixed aliases are normalized during publication. For example, microsoft-natasha becomes en-AU-NatashaNeural, and the synthesizer vendor, language, category, and engine are aligned with the Microsoft catalog. Agent updates support elevenlabs, deepgram, whisper, microsoft, google, cartesia, and rime. Unknown custom voice IDs and vendors are preserved.
Response:
{
  "agent": {
    "agentId": "agent_123",
    "agentName": "Australian Support Agent",
    "userId": "dialgood_user_123",
    "settings": {
      "language": "en-AU",
      "voice": {
        "vendor": "microsoft",
        "voice_id": "en-AU-NatashaNeural",
        "language": "en-AU",
        "category": "Neural"
      },
      "raw": {
        "synthesizer": {
          "vendor": "microsoft",
          "voice": "en-AU-NatashaNeural",
          "language": "en-AU",
          "engine": "neural"
        }
      }
    },
    "phoneNumbers": [
      "+61390000000"
    ]
  }
}
The following fields are controlled by Dialgood and ignored on update:
id
agentId
userId
owner
rights
created_at
updated_at

Publication and versioning behavior#

Each successful publish:
1.
Validates and normalizes the submitted agent configuration.
2.
Updates the live agent.
3.
Creates a managed version with a server-generated version_id and version_number.
4.
Records the commit message, authenticated user, and timestamp.
Version history is subject to the retention limit configured for the account.
The update response currently does not include the generated version_id or version_number. After publishing, use GET /agents/{agentId}/versions?limit=1 to retrieve the latest version and GET /agents/{agentId}/versions/{versionId} to inspect its complete snapshot.
A successful retry creates another managed version. If a request ends without a clear response, check the current agent and latest version before retrying to avoid creating an unnecessary additional version.

Delete Agent#

Deleting an agent removes it from the Partner API. It does not release the customer's phone number or disconnect the carrier integration; manage those resources separately if required.
Response:
{
  "status": true
}

Settings#

The settings endpoints merge the supplied settings keys into the existing settings object and create a managed version. For broader agent edits, prefer PATCH /agents/{agentId} with the intended agent fields.

Get Settings#

Response:
{
  "settings": {
    "language": "en"
  }
}

Update Settings#

Example request:
{
  "settings": {
    "language": "en",
    "welcomeMessage": "How can I help?"
  }
}
The endpoint also accepts the settings object directly:
{
  "language": "en",
  "welcomeMessage": "How can I help?"
}
Response:
{
  "settings": {
    "language": "en",
    "welcomeMessage": "How can I help?"
  }
}
You can include metadata.commit_message or metadata.commitMessage alongside settings when you want to label the resulting version.

Credentials#

Credential endpoints should only be called from secure server-side partner systems. Do not expose Dialgood API keys or credential values in browser JavaScript.

Get Credentials#

Response:
{
  "credentials": [
    {
      "key": "SERVICE_API_KEY",
      "value": "secret-value"
    }
  ]
}

Update Credentials#

Example request:
{
  "credentials": [
    {
      "key": "SERVICE_API_KEY",
      "value": "new-secret-value"
    }
  ]
}
The endpoint also accepts the credentials array directly:
[
  {
    "key": "SERVICE_API_KEY",
    "value": "new-secret-value"
  }
]
Response:
{
  "status": true
}
Credential updates replace the agent's credential list, store the supplied values securely, and create an agent version. You can include metadata.commit_message or metadata.commitMessage alongside credentials when you want to label the resulting version.
Do not include the masked credential entries returned by GET /agents/{agentId} in a complete agent publish. If an agent has stored credentials, use the focused settings endpoint for non-secret settings so omitted credentials remain preserved. A settings update and a credential rotation are separate version-managed operations and each creates its own version.

Call Logs#

Call-log reads are scoped to agents accessible to the authenticated Dialgood user.

List Call Logs#

Optional query parameters:
ParameterTypeDescription
fromnumberStart timestamp for the call-log range.
tonumberEnd timestamp for the call-log range.
pagenumberPage number. Defaults to 1.
limitnumberRecords per page. Defaults to 10.
tzstringTimezone used by the CDR lookup. Defaults to Australia/Melbourne.
fromnumberstringFilter by caller number.
tonumberstringFilter by destination number.
statusstringFilter by call status.
directionstringFilter by call direction.
campaignstringFilter by campaign ID.
conversationidstringFilter by conversation ID.
hidewebcallsbooleanSet to true to hide web calls.
Example:
Response:
{
  "data": [
    {
      "botId": "agent_123",
      "conversationId": "conversation_123",
      "contactId": "contact_123",
      "campaignId": "campaign_123",
      "created_at": "2026-05-24T00:00:00.000Z",
      "data": {
        "from": "+15551234567",
        "to": "+15557654321",
        "direction": "outbound",
        "callStatus": "completed",
        "callDuration": 3
      }
    }
  ],
  "totalPages": 1,
  "totalRecords": 1,
  "currentPage": 1
}

Post-call Webhook#

Each partner can register one webhook per writable agent. The registration is separate from agent settings and does not create an agent version.
Register with PUT and a public HTTPS URL:
{
  "url": "https://partner.example/post-call"
}
The signing secret is returned only when the webhook is first created or when rotateSecret: true is supplied. See Agent Post-call Webhooks for the event and signature contract.

Versions#

Agent changes made through the Partner API are versioned like dashboard changes. List responses omit the full updates payload for compactness; fetch a specific version when you need its configuration snapshot.
Version identifiers and numbers are managed by Dialgood. Do not supply version_id or version_number in an agent update request.

List Versions#

Optional query parameters:
ParameterTypeDescription
limitnumberMaximum number of versions to return. Defaults to 25.
skipnumberNumber of versions to skip. Defaults to 0.
Versions are returned newest first. Use limit=1&skip=0 to retrieve the latest managed version after a publish.
Response:
{
  "versions": [
    {
      "version_id": "version_123",
      "version_number": 2,
      "commit_message": "Partner dashboard update",
      "agent_id": "agent_123",
      "metadata": {
        "user": "Partner User",
        "userId": "dialgood_user_123",
        "timestamp": 1779560000000
      }
    }
  ],
  "totalCount": 2,
  "limit": 25,
  "skip": 0,
  "hasMore": false
}

Get Version#

Response:
{
  "version": {
    "version_id": "version_123",
    "version_number": 2,
    "commit_message": "Partner dashboard update",
    "agent_id": "agent_123",
    "updates": {},
    "metadata": {
      "user": "Partner User",
      "userId": "dialgood_user_123",
      "timestamp": 1779560000000
    }
  }
}

Recommended Integration Flow#

1.
Store the Dialgood API key securely in the partner backend.
2.
Call GET /agents to map Dialgood agentId values into the partner dashboard.
3.
Read GET /agents/{agentId} before editing so the partner starts from the current configuration.
4.
Create an agent with POST /agents if needed.
5.
Publish a complete editable snapshot with PUT /agents/{agentId}, or amend selected top-level fields with PATCH /agents/{agentId}. Include metadata.commit_message for readable version history. If the agent has stored credentials, exclude settings from this operation and update non-secret settings through the focused settings endpoint.
6.
Never round-trip masked credential entries through a full agent update. Use the credential endpoint when secrets change.
7.
Use focused endpoints only when the partner UI is editing one supported area, such as credentials or settings.
8.
Fetch GET /agents/{agentId}/versions?limit=1 to confirm that the publish created a managed version.
9.
Fetch GET /agents/{agentId} to confirm the final normalized live agent state.
10.
Fetch GET /agents/{agentId}/call-logs when the partner dashboard needs call activity.

Security Recommendations#

Make Partner API calls from server-side systems only.
Store Dialgood API keys in a secret manager or encrypted configuration store.
Do not log api_token values.
Do not log credential request bodies or credential responses.
Treat 404 as either a missing agent or an agent that belongs to another Dialgood user.
Rotate Dialgood API keys if a partner system or credential store is compromised.
Modified at 2026-10-02 03:40:02
Next
Mute an active call
Built with