OneOS Docs
Genesis 0.1.12 Console

API reference

Dials

Phone numbers and calls for agents: buy and configure numbers, place and receive calls, and read call records.

Operations
37
Base path
https://os.one.ml/api/v1/dials
Scopes
dials:read dials:write
API keys
1 failed with an API key · 2 not yet tested · 34 tested with an API key
SDK
genesis.call('dials_listAgents', …) · helpers under genesis.dials
CLI
genesis dials
MCP
37 tools

Operations

OperationEndpointAPI key
List saved agents in the selected scopeGET/agentsTested with an API key
Save an unassigned AgentProfile by scoped normalized namePOST/agentsTested with an API key
List real call lifecycle and carrier outcomesGET/callsTested with an API key
Queue an approved outbound call with an idempotency keyPOST/calls/outboundTested with an API key
Read an existing outbound admission receipt without originating a callPOST/calls/outbound/recoverTested with an API key
Validate consent and outbound call prerequisitesPOST/calls/outbound/validateTested with an API key
Read the scoped Dials operating surfaceGET/console/operating-surfaceTested with an API key
Read authoritative scoped Dials resource countsGET/console/summaryTested with an API key
List saved humans in the selected scopeGET/human-profilesTested with an API key
Save an unassigned HumanProfile by scoped normalized namePOST/human-profilesTested with an API key
List scoped saved message templatesGET/message-templatesTested with an API key
Save a scoped message template by normalized namePOST/message-templatesTested with an API key
List scoped saved messages and actual delivery stateGET/messagesTested with an API key
Queue an explicitly approved outbound messagePOST/messages/outboundTested with an API key
List scoped messaging brand configurationGET/messaging/brandsTested with an API key
Save pending messaging brand configurationPOST/messaging/brandsTested with an API key
List scoped messaging campaign configurationGET/messaging/campaignsTested with an API key
Save a pending campaign for a verified owned brandPOST/messaging/campaignsTested with an API key
Save pending association of an owned number with an owned campaignPOST/messaging/campaigns/{campaign_id}/numbersTested with an API key
List numbers in the authorized scopeGET/numbersTested with an API key
Release an owned number at its carrier through DELETEDELETE/numbers/{number_id}Tested with an API key
Assign an owned numberPOST/numbers/assignTested with an API key
Update the caller name of an owned numberPUT/numbers/cnamTested with an API key
List scoped inventory driftGET/numbers/driftTested with an API key
Register and bind the dispatchable emergency address for an owned numberPOST/numbers/e911Tested with an API key
Provision a carrier number with an idempotency keyPOST/numbers/provisionFailed with an API key
Reconcile owned inventory against configured carriersPOST/numbers/reconcileTested with an API key
List scoped carrier reconciliation receiptsGET/numbers/reconciliationsTested with an API key
Release an owned numberPOST/numbers/releaseTested with an API key
Search real carrier number inventoryGET/numbers/searchTested with an API key
List managed inbound policies in the verified scopeGET/routing/rulesTested with an API key
Create an enabled owned-number inbound policy with durable UUID idempotencyPOST/routing/rules—
Disable an owned managed inbound policy while retaining its recordDELETE/routing/rules/{rule_id}—
List saved voiceProfiles in the selected scopeGET/voice-profilesTested with an API key
Save an unassigned VoiceProfile by scoped normalized namePOST/voice-profilesTested with an API key
List scoped saved workflow routing descriptorsGET/workflowsTested with an API key
Save a normalized workflow and enabled routing descriptorPOST/workflows/deployTested with an API key

Agents

List saved agents in the selected scope

GET/v1/dials/agents

dials:readTested with an API keydials_listAgents

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • agentsobject[]required
    • agents[].[].idstringrequired
    • agents[].[].scopeobjectrequired
    • agents[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • agents[].[].scope.organizationIdstringrequired

      min length 1

    • agents[].[].scope.workspaceIdstringrequired

      min length 1

    • agents[].[].scope.projectIdstringrequired

      min length 1

    • agents[].[].scope.environmentIdstringrequired

      min length 1

    • agents[].[].namestringrequired
    • agents[].[].rolestringrequired
    • agents[].[].voiceModelIdstringrequired

      Opaque model identifier; not a validated voice-profile binding.

    • agents[].[].mode"autonomous" | "copilot" | "human_handoff"required
    • agents[].[].phoneNumberIdstring | nullrequired
    • agents[].[].systemPromptstringrequired
    • agents[].[].statusstringrequired

      Saved backend status does not establish a running model or voice runtime.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/agents?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save an unassigned AgentProfile by scoped normalized name

POST/v1/dials/agents

dials:writeTested with an API keydials_createAgent

This POST upserts by full scope and trimmed,lowercased name. Omitted optional fields reset. Create unassigned and assign a number separately; never replay creation after an assignment failure. No invitation,model deployment or consent verification is implied.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • namestringrequired

    min length 1

  • rolestringrequired

    min length 1

  • voiceModelIdstringrequired

    Model string; never substitute a governed voice profile ID. min length 1

  • mode"autonomous" | "copilot" | "human_handoff"required
  • systemPromptstring | null

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • agentobjectrequired
    • agent.idstringrequired
    • agent.scopeobjectrequired
    • agent.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • agent.scope.organizationIdstringrequired

      min length 1

    • agent.scope.workspaceIdstringrequired

      min length 1

    • agent.scope.projectIdstringrequired

      min length 1

    • agent.scope.environmentIdstringrequired

      min length 1

    • agent.namestringrequired
    • agent.rolestringrequired
    • agent.voiceModelIdstringrequired

      Opaque model identifier; not a validated voice-profile binding.

    • agent.mode"autonomous" | "copilot" | "human_handoff"required
    • agent.phoneNumberIdstring | nullrequired
    • agent.systemPromptstringrequired
    • agent.statusstringrequired

      Saved backend status does not establish a running model or voice runtime.

    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 422Invalid profile fields, missing consent/license attestation, or unsupported production model
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/agents" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "name": "string",
    "role": "string",
    "voiceModelId": "string",
    "mode": "autonomous"
  }'

Calls

List real call lifecycle and carrier outcomes

GET/v1/dials/calls

dials:readTested with an API keydials_listCalls

Return scoped saved sessions with actual nullable carrier outcomes and separate dispatchState. A queued session with uncertain or recovery_required dispatchState must be reconciled without re-originating the call.

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • callsobject[]required
    • calls[].[].idstringrequired
    • calls[].[].scopeobjectrequired
    • calls[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • calls[].[].scope.organizationIdstringrequired

      min length 1

    • calls[].[].scope.workspaceIdstringrequired

      min length 1

    • calls[].[].scope.projectIdstringrequired

      min length 1

    • calls[].[].scope.environmentIdstringrequired

      min length 1

    • calls[].[].direction"inbound" | "outbound" | "on_net"required
    • calls[].[].status"created" | "compliance_checked" | "queued" | "dialing" | "ringing" | "answered" | "bridged" | "held" | "completed" | "failed" | "blocked"required

      Call lifecycle only. A queued lifecycle can coexist with uncertain or recovery_required dispatchState; it is not proof that another worker should execute it.

    • calls[].[].phoneNumberIdstringrequired
    • calls[].[].remoteE164stringrequired
    • calls[].[].callControlobject | object

      Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

    • calls[].[].providerCallIdstring | nullrequired
    • calls[].[].sipStatusinteger | null (int32)required
    • calls[].[].hangupCausestring | nullrequired
    • calls[].[].durationSecondsinteger | null (int32)required
    • calls[].[].billedSecondsinteger | null (int32)required
    • calls[].[].answeredbooleanrequired

      Whether the far end was observed to answer; false alone is not a terminal result.

    • calls[].[].recordingIdstring | nullrequired
    • calls[].[].dispatchState"pending" | "claimed" | "dispatched" | "failed" | "uncertain" | "recovery_required" | null

      Submission state separate from the call lifecycle. uncertain means provider acceptance is unknown; recovery_required means a durable receipt needs reconciliation. Neither means successful execution or authorizes retry. Null means no recognized dispatch job is available.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/calls?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Queue an approved outbound call with an idempotency key

POST/v1/dials/calls/outbound

dials:writeTested with an API keydials_createOutboundCall

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • toE164stringrequired

    min length 1

  • fromNumberIdstringrequired

    min length 1

  • idempotencyKeystringrequired

    min length 1

  • complianceApprovedbooleanrequired
  • disclosureApprovedbooleanrequired
  • recordingPolicyApprovedbooleanrequired
  • emergencyAddressBoundbooleanrequired
  • callControlobject | objectrequired

    Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • callobjectrequired

      Saved call session. Admission/recovery receipts return this session without the separate carrier outcome fields in calls.list.

    • call.idstringrequired
    • call.scopeobjectrequired
    • call.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • call.scope.organizationIdstringrequired

      min length 1

    • call.scope.workspaceIdstringrequired

      min length 1

    • call.scope.projectIdstringrequired

      min length 1

    • call.scope.environmentIdstringrequired

      min length 1

    • call.direction"inbound" | "outbound" | "on_net"required
    • call.status"created" | "compliance_checked" | "queued" | "dialing" | "ringing" | "answered" | "bridged" | "held" | "completed" | "failed" | "blocked"required

      Call lifecycle only. A queued lifecycle can coexist with uncertain or recovery_required dispatchState; it is not proof that another worker should execute it.

    • call.phoneNumberIdstringrequired
    • call.remoteE164stringrequired
    • call.callControlobject | object

      Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

    • auditIdstringrequired
    • dispatchJobIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
    • idempotentReplaybooleanrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/calls/outbound" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "toE164": "string",
    "fromNumberId": "string",
    "idempotencyKey": "string",
    "complianceApproved": true,
    "disclosureApproved": true,
    "recordingPolicyApproved": true,
    "emergencyAddressBound": true,
    "callControl": {
      "type": "speak",
      "text": "string"
    }
  }'

Read an existing outbound admission receipt without originating a call

POST/v1/dials/calls/outbound/recover

dials:writeTested with an API keydials_recoverOutboundCall

Submit the identical original OutboundCall body/key through this distinct read-journal-only route. Requires verified org/full selected scope and dials:write. Returns the original stored CreateOutboundCallResponse with idempotentReplay:true; missing 404/mismatched 409 fails closed. No new call, job, audit, usage, provider request or worker action occurs. This is not the normal creation POST and must not bypass an uncertain-call fence. Runtime deployment/acceptance is separate from this schema candidate.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • toE164stringrequired

    min length 1

  • fromNumberIdstringrequired

    min length 1

  • idempotencyKeystringrequired

    min length 1

  • complianceApprovedbooleanrequired
  • disclosureApprovedbooleanrequired
  • recordingPolicyApprovedbooleanrequired
  • emergencyAddressBoundbooleanrequired
  • callControlobject | objectrequired

    Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

Responses

  • 200Existing saved admission receipt; idempotentReplay:true only. Carrier acceptance/current state is not established.
    Response fields
    • okbooleanrequired
    • callobjectrequired

      Saved call session. Admission/recovery receipts return this session without the separate carrier outcome fields in calls.list.

    • call.idstringrequired
    • call.scopeobjectrequired
    • call.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • call.scope.organizationIdstringrequired

      min length 1

    • call.scope.workspaceIdstringrequired

      min length 1

    • call.scope.projectIdstringrequired

      min length 1

    • call.scope.environmentIdstringrequired

      min length 1

    • call.direction"inbound" | "outbound" | "on_net"required
    • call.status"created" | "compliance_checked" | "queued" | "dialing" | "ringing" | "answered" | "bridged" | "held" | "completed" | "failed" | "blocked"required

      Call lifecycle only. A queued lifecycle can coexist with uncertain or recovery_required dispatchState; it is not proof that another worker should execute it.

    • call.phoneNumberIdstringrequired
    • call.remoteE164stringrequired
    • call.callControlobject | object

      Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

    • auditIdstringrequired
    • dispatchJobIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
    • idempotentReplaytruerequired
  • 400Invalid scope or request.
  • 401Missing verified identity.
  • 403Scope or Dials write grant not authorized.
  • 404No existing journal receipt in the verified full scope; no call is inserted.
  • 409Existing idempotency key has a different canonical request body; no mutation.
  • 422Malformed outbound control/request.
  • 500Journal read failed.
  • 503Backend unavailable.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/calls/outbound/recover" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "toE164": "string",
    "fromNumberId": "string",
    "idempotencyKey": "string",
    "complianceApproved": true,
    "disclosureApproved": true,
    "recordingPolicyApproved": true,
    "emergencyAddressBound": true,
    "callControl": {
      "type": "speak",
      "text": "string"
    }
  }'

Validate consent and outbound call prerequisites

POST/v1/dials/calls/outbound/validate

dials:writeTested with an API keydials_validateOutboundCall

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • toE164stringrequired

    min length 1

  • fromNumberIdstringrequired

    min length 1

  • idempotencyKeystringrequired

    min length 1

  • complianceApprovedbooleanrequired
  • disclosureApprovedbooleanrequired
  • recordingPolicyApprovedbooleanrequired
  • emergencyAddressBoundbooleanrequired
  • callControlobject | objectrequired

    Customer-selected call behavior. Speak plays the provided text and ends the call; stream connects live audio to the customer agent WebSocket. No default behavior is synthesized.

Responses

  • 200Success
    Response fields

    A JSON object.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/calls/outbound/validate" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "toE164": "string",
    "fromNumberId": "string",
    "idempotencyKey": "string",
    "complianceApproved": true,
    "disclosureApproved": true,
    "recordingPolicyApproved": true,
    "emergencyAddressBound": true,
    "callControl": {
      "type": "speak",
      "text": "string"
    }
  }'

Console

Read the scoped Dials operating surface

GET/v1/dials/console/operating-surface

dials:readTested with an API keydials_getOperatingSurface

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • scopeobjectrequired
    • scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • scope.organizationIdstringrequired

      min length 1

    • scope.workspaceIdstringrequired

      min length 1

    • scope.projectIdstringrequired

      min length 1

    • scope.environmentIdstringrequired

      min length 1

    • summaryobjectrequired
    • summary.okbooleanrequired
    • summary.scopeobjectrequired
    • summary.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • summary.scope.organizationIdstringrequired

      min length 1

    • summary.scope.workspaceIdstringrequired

      min length 1

    • summary.scope.projectIdstringrequired

      min length 1

    • summary.scope.environmentIdstringrequired

      min length 1

    • summary.callsobjectrequired
    • summary.calls.totalintegerrequired

      min 0

    • summary.calls.queuedintegerrequired

      min 0

    • summary.calls.activeintegerrequired

      min 0

    • summary.calls.completedintegerrequired

      min 0

    • summary.calls.failedintegerrequired

      min 0

    • summary.dispatchobjectrequired
    • summary.dispatch.totalintegerrequired

      min 0

    • summary.dispatch.pendingintegerrequired

      min 0

    • summary.dispatch.claimedintegerrequired

      min 0

    • summary.dispatch.dispatchedintegerrequired

      min 0

    • summary.dispatch.failedintegerrequired

      min 0

    • summary.peopleobjectrequired
    • summary.people.deployedintegerrequired

      min 0

    • summary.agentsobjectrequired
    • summary.agents.deployedintegerrequired

      min 0

    • summary.routesobjectrequired
    • summary.routes.deployedintegerrequired

      min 0

    • summary.numbersobjectrequired
    • summary.numbers.deployedintegerrequired

      min 0

    • summary.voiceobjectrequired
    • summary.voice.deployedintegerrequired

      min 0

    • summary.messagesobjectrequired
    • summary.messages.totalintegerrequired

      min 0

    • summary.messages.queuedintegerrequired

      min 0

    • summary.messages.deliveredintegerrequired

      min 0

    • summary.messages.failedintegerrequired

      min 0

    • summary.usageobjectrequired
    • summary.usage.totalintegerrequired

      min 0

    • summary.usage.quantitynumberrequired
    • summary.usage.lastMetricstring | nullrequired
    • summary.usage.lastResourceIdstring | nullrequired
    • surfacesobject[]required
    • surfaces[].[].keystringrequired
    • surfaces[].[].titlestringrequired
    • surfaces[].[].audiencestringrequired
    • surfaces[].[].statusstringrequired
    • surfaces[].[].hrefstringrequired
    • surfaces[].[].descriptionstringrequired
    • surfaces[].[].primaryActionstringrequired
    • surfaces[].[].backendResourcestringrequired
    • surfaces[].[].countintegerrequired

      min 0

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/console/operating-surface?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Read authoritative scoped Dials resource counts

GET/v1/dials/console/summary

dials:readTested with an API keydials_getConsoleSummary

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • scopeobjectrequired
    • scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • scope.organizationIdstringrequired

      min length 1

    • scope.workspaceIdstringrequired

      min length 1

    • scope.projectIdstringrequired

      min length 1

    • scope.environmentIdstringrequired

      min length 1

    • callsobjectrequired
    • calls.totalintegerrequired

      min 0

    • calls.queuedintegerrequired

      min 0

    • calls.activeintegerrequired

      min 0

    • calls.completedintegerrequired

      min 0

    • calls.failedintegerrequired

      min 0

    • dispatchobjectrequired
    • dispatch.totalintegerrequired

      min 0

    • dispatch.pendingintegerrequired

      min 0

    • dispatch.claimedintegerrequired

      min 0

    • dispatch.dispatchedintegerrequired

      min 0

    • dispatch.failedintegerrequired

      min 0

    • peopleobjectrequired
    • people.deployedintegerrequired

      min 0

    • agentsobjectrequired
    • agents.deployedintegerrequired

      min 0

    • routesobjectrequired
    • routes.deployedintegerrequired

      min 0

    • numbersobjectrequired
    • numbers.deployedintegerrequired

      min 0

    • voiceobjectrequired
    • voice.deployedintegerrequired

      min 0

    • messagesobjectrequired
    • messages.totalintegerrequired

      min 0

    • messages.queuedintegerrequired

      min 0

    • messages.deliveredintegerrequired

      min 0

    • messages.failedintegerrequired

      min 0

    • usageobjectrequired
    • usage.totalintegerrequired

      min 0

    • usage.quantitynumberrequired
    • usage.lastMetricstring | nullrequired
    • usage.lastResourceIdstring | nullrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/console/summary?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Human profiles

List saved humans in the selected scope

GET/v1/dials/human-profiles

dials:readTested with an API keydials_listHumanProfiles

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • humansobject[]required
    • humans[].[].idstringrequired
    • humans[].[].scopeobjectrequired
    • humans[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • humans[].[].scope.organizationIdstringrequired

      min length 1

    • humans[].[].scope.workspaceIdstringrequired

      min length 1

    • humans[].[].scope.projectIdstringrequired

      min length 1

    • humans[].[].scope.environmentIdstringrequired

      min length 1

    • humans[].[].displayNamestringrequired
    • humans[].[].rolestringrequired

      Descriptive phone role, not a One account authorization grant.

    • humans[].[].emailstring | nullrequired
    • humans[].[].extensionstring | nullrequired
    • humans[].[].phoneNumberIdstring | nullrequired
    • humans[].[].contactE164string | nullrequired
    • humans[].[].presence"available" | "focus" | "after_hours" | "offline"required
    • humans[].[].escalationPriorityintegerrequired

      min 0 · max 1000

    • humans[].[].statusstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/human-profiles?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save an unassigned HumanProfile by scoped normalized name

POST/v1/dials/human-profiles

dials:writeTested with an API keydials_createHumanProfile

This POST upserts by full scope and trimmed,lowercased name. Omitted optional fields reset. Create unassigned and assign a number separately; never replay creation after an assignment failure. No invitation,model deployment or consent verification is implied.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • displayNamestringrequired

    min length 1

  • rolestringrequired

    min length 1

  • emailstring | null

    max length 320

  • extensionstring | null

    pattern ^[0-9]{0,8}$

  • contactE164string | null

    Actual destination handset; backend accepts international E164 or normalizes US10/11 digits.

  • presence"available" | "focus" | "after_hours" | "offline" | null
  • escalationPriorityinteger | null

    min 0 · max 1000

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • humanobjectrequired
    • human.idstringrequired
    • human.scopeobjectrequired
    • human.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • human.scope.organizationIdstringrequired

      min length 1

    • human.scope.workspaceIdstringrequired

      min length 1

    • human.scope.projectIdstringrequired

      min length 1

    • human.scope.environmentIdstringrequired

      min length 1

    • human.displayNamestringrequired
    • human.rolestringrequired

      Descriptive phone role, not a One account authorization grant.

    • human.emailstring | nullrequired
    • human.extensionstring | nullrequired
    • human.phoneNumberIdstring | nullrequired
    • human.contactE164string | nullrequired
    • human.presence"available" | "focus" | "after_hours" | "offline"required
    • human.escalationPriorityintegerrequired

      min 0 · max 1000

    • human.statusstringrequired
    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 422Invalid profile fields, missing consent/license attestation, or unsupported production model
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/human-profiles" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "displayName": "string",
    "role": "string"
  }'

Message templates

List scoped saved message templates

GET/v1/dials/message-templates

dials:readTested with an API keydials_listMessageTemplates

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • templatesobject[]required
    • templates[].[].idstringrequired
    • templates[].[].scopeobjectrequired
    • templates[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • templates[].[].scope.organizationIdstringrequired

      min length 1

    • templates[].[].scope.workspaceIdstringrequired

      min length 1

    • templates[].[].scope.projectIdstringrequired

      min length 1

    • templates[].[].scope.environmentIdstringrequired

      min length 1

    • templates[].[].namestringrequired
    • templates[].[].channelstringrequired
    • templates[].[].categorystringrequired
    • templates[].[].bodystringrequired
    • templates[].[].statusstringrequired

      approved is locally saved template state, not carrier/compliance approval.

  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/message-templates?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save a scoped message template by normalized name

POST/v1/dials/message-templates

dials:writeTested with an API keydials_createMessageTemplate

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • namestringrequired

    min length 1

  • channel"sms" | "mms"required

    Backend trims and lowercases sms/mms. This request has no media attachment field; mms does not imply attachment support.

  • categorystringrequired

    min length 1

  • bodystringrequired

    Nonblank body; the backend limits trimmed UTF-8 bytes to 5000, not only Unicode characters. min length 1 · max length 5000

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • templateobjectrequired
    • template.idstringrequired
    • template.scopeobjectrequired
    • template.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • template.scope.organizationIdstringrequired

      min length 1

    • template.scope.workspaceIdstringrequired

      min length 1

    • template.scope.projectIdstringrequired

      min length 1

    • template.scope.environmentIdstringrequired

      min length 1

    • template.namestringrequired
    • template.channelstringrequired
    • template.categorystringrequired
    • template.bodystringrequired
    • template.statusstringrequired

      approved is locally saved template state, not carrier/compliance approval.

    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/message-templates" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "name": "string",
    "channel": "sms",
    "category": "string",
    "body": "string"
  }'

Messages

List scoped saved messages and actual delivery state

GET/v1/dials/messages

dials:readTested with an API keydials_listMessages

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • messagesobject[]required
    • messages[].[].idstringrequired
    • messages[].[].scopeobjectrequired
    • messages[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • messages[].[].scope.organizationIdstringrequired

      min length 1

    • messages[].[].scope.workspaceIdstringrequired

      min length 1

    • messages[].[].scope.projectIdstringrequired

      min length 1

    • messages[].[].scope.environmentIdstringrequired

      min length 1

    • messages[].[].direction"inbound" | "outbound"required
    • messages[].[].channelstringrequired
    • messages[].[].status"queued" | "sending" | "sent" | "delivered" | "undelivered" | "failed" | "received"required

      queued is durable admission, sending is adapter claim, sent is carrier acceptance, delivered is reported delivery; these are distinct. Never infer receipt from queueing.

    • messages[].[].fromNumberIdstringrequired

      The Dials-owned number in either direction; for inbound, this is the receiving number.

    • messages[].[].toE164stringrequired

      Literal destination; for inbound this can be the owned number.

    • messages[].[].remoteE164stringrequired

      Counterparty for inbound and outbound.

    • messages[].[].bodystringrequired
    • messages[].[].templateIdstring | nullrequired
    • messages[].[].providerstringrequired
    • messages[].[].providerMessageIdstring | nullrequired
    • messages[].[].providerStatusstring | nullrequired
    • messages[].[].segmentsinteger | null (int32)required

      Can be a local estimate at queue time, replaced by a carrier-reported count. It is not a price or proof of billing.

    • messages[].[].errorstring | nullrequired
    • messages[].[].errorCodestring | nullrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/messages?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Queue an explicitly approved outbound message

POST/v1/dials/messages/outbound

dials:writeTested with an API keydials_createOutboundMessage

Persist one scoped message, dispatch job, audit and usage in a transaction. Returns queued, not delivered. No automatic retry, approval default or provider registration is supplied.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • fromNumberIdstringrequired

    min length 1

  • toE164stringrequired

    pattern ^\+[0-9]{8,15}$

  • channel"sms" | "mms"required

    Backend trims and lowercases sms/mms. This request has no media attachment field; mms does not imply attachment support.

  • bodystringrequired

    Nonblank body; the backend limits trimmed UTF-8 bytes to 5000, not only Unicode characters. min length 1 · max length 5000

  • templateIdstring | null
  • idempotencyKeystringrequired

    min length 1

  • registrationApprovedbooleanrequired
  • consentApprovedbooleanrequired
  • optOutPolicyApprovedbooleanrequired

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • messageobjectrequired
    • message.idstringrequired
    • message.scopeobjectrequired
    • message.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • message.scope.organizationIdstringrequired

      min length 1

    • message.scope.workspaceIdstringrequired

      min length 1

    • message.scope.projectIdstringrequired

      min length 1

    • message.scope.environmentIdstringrequired

      min length 1

    • message.direction"inbound" | "outbound"required
    • message.channelstringrequired
    • message.status"queued" | "sending" | "sent" | "delivered" | "undelivered" | "failed" | "received"required

      queued is durable admission, sending is adapter claim, sent is carrier acceptance, delivered is reported delivery; these are distinct. Never infer receipt from queueing.

    • message.fromNumberIdstringrequired

      The Dials-owned number in either direction; for inbound, this is the receiving number.

    • message.toE164stringrequired

      Literal destination; for inbound this can be the owned number.

    • message.remoteE164stringrequired

      Counterparty for inbound and outbound.

    • message.bodystringrequired
    • message.templateIdstring | nullrequired
    • message.providerstringrequired
    • message.providerMessageIdstring | nullrequired
    • message.providerStatusstring | nullrequired
    • message.segmentsinteger | null (int32)required

      Can be a local estimate at queue time, replaced by a carrier-reported count. It is not a price or proof of billing.

    • message.errorstring | nullrequired
    • message.errorCodestring | nullrequired
    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
    • idempotentReplaybooleanrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 404Referenced resource is absent from the verified organization and selected scope.
  • 409Existing scoped resource/assignment or idempotency conflict.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/messages/outbound" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "fromNumberId": "string",
    "toE164": "string",
    "channel": "sms",
    "body": "string",
    "idempotencyKey": "string",
    "registrationApproved": true,
    "consentApproved": true,
    "optOutPolicyApproved": true
  }'

Messaging

List scoped messaging brand configuration

GET/v1/dials/messaging/brands

dials:readTested with an API keydials_listMessagingBrands

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • brandsobject[]required
    • brands[].[].idstringrequired
    • brands[].[].scopeobjectrequired
    • brands[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • brands[].[].scope.organizationIdstringrequired

      min length 1

    • brands[].[].scope.workspaceIdstringrequired

      min length 1

    • brands[].[].scope.projectIdstringrequired

      min length 1

    • brands[].[].scope.environmentIdstringrequired

      min length 1

    • brands[].[].legalNamestringrequired
    • brands[].[].displayNamestringrequired
    • brands[].[].entityType"private_profit" | "public_profit" | "non_profit" | "government" | "sole_proprietor"required
    • brands[].[].taxIdstring | nullrequired

      Required by backend for all entity types except sole_proprietor.

    • brands[].[].taxIdCountrystringrequired
    • brands[].[].verticalstringrequired
    • brands[].[].emailstringrequired

      Backend requires an @ character; no email delivery occurs.

    • brands[].[].contactPhoneE164stringrequired

      Actual contact number; backend normalizes dialable input.

    • brands[].[].postalAddressstringrequired
    • brands[].[].websitestringrequired
    • brands[].[].statusstringrequired
    • brands[].[].providerstringrequired
    • brands[].[].providerBrandIdstring | nullrequired
    • brands[].[].errorstring | nullrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/messaging/brands?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save pending messaging brand configuration

POST/v1/dials/messaging/brands

dials:writeTested with an API keydials_createMessagingBrand

Local pending record only. No provider submission or verified registration is performed by this route.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • legalNamestringrequired

    min length 1

  • displayNamestringrequired

    min length 1

  • entityType"private_profit" | "public_profit" | "non_profit" | "government" | "sole_proprietor"required
  • taxIdstring | null

    Required by backend for all entity types except sole_proprietor.

  • taxIdCountrystringrequired

    min length 2 · max length 2

  • verticalstringrequired

    min length 1

  • emailstringrequired

    Backend requires an @ character; no email delivery occurs. min length 1

  • contactPhoneE164stringrequired

    Actual contact number; backend normalizes dialable input. min length 1

  • postalAddressstringrequired

    min length 1

  • websitestringrequired

    min length 1 · pattern ^https?://

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • brandobjectrequired
    • brand.idstringrequired
    • brand.scopeobjectrequired
    • brand.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • brand.scope.organizationIdstringrequired

      min length 1

    • brand.scope.workspaceIdstringrequired

      min length 1

    • brand.scope.projectIdstringrequired

      min length 1

    • brand.scope.environmentIdstringrequired

      min length 1

    • brand.legalNamestringrequired
    • brand.displayNamestringrequired
    • brand.entityType"private_profit" | "public_profit" | "non_profit" | "government" | "sole_proprietor"required
    • brand.taxIdstring | nullrequired

      Required by backend for all entity types except sole_proprietor.

    • brand.taxIdCountrystringrequired
    • brand.verticalstringrequired
    • brand.emailstringrequired

      Backend requires an @ character; no email delivery occurs.

    • brand.contactPhoneE164stringrequired

      Actual contact number; backend normalizes dialable input.

    • brand.postalAddressstringrequired
    • brand.websitestringrequired
    • brand.statusstringrequired
    • brand.providerstringrequired
    • brand.providerBrandIdstring | nullrequired
    • brand.errorstring | nullrequired
    • auditIdstringrequired
    • nextstringrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 409Existing scoped resource/assignment or idempotency conflict.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/messaging/brands" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "legalName": "string",
    "displayName": "string",
    "entityType": "private_profit",
    "taxIdCountry": "string",
    "vertical": "string",
    "email": "string",
    "contactPhoneE164": "string",
    "postalAddress": "string",
    "website": "string"
  }'

List scoped messaging campaign configuration

GET/v1/dials/messaging/campaigns

dials:readTested with an API keydials_listMessagingCampaigns

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • campaignsobject[]required
    • campaigns[].[].idstringrequired
    • campaigns[].[].scopeobjectrequired
    • campaigns[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • campaigns[].[].scope.organizationIdstringrequired

      min length 1

    • campaigns[].[].scope.workspaceIdstringrequired

      min length 1

    • campaigns[].[].scope.projectIdstringrequired

      min length 1

    • campaigns[].[].scope.environmentIdstringrequired

      min length 1

    • campaigns[].[].brandIdstringrequired
    • campaigns[].[].namestringrequired
    • campaigns[].[].useCase"2fa" | "account_notification" | "customer_care" | "delivery_notification" | "fraud_alert" | "higher_education" | "marketing" | "polling_voting" | "public_service_announcement" | "security_alert" | "mixed"required
    • campaigns[].[].descriptionstringrequired
    • campaigns[].[].sampleMessagesstring[]required
    • campaigns[].[].optInProcessstringrequired
    • campaigns[].[].helpMessagestringrequired
    • campaigns[].[].optOutMessagestringrequired
    • campaigns[].[].directLendingbooleanrequired
    • campaigns[].[].embeddedLinkbooleanrequired
    • campaigns[].[].embeddedPhonebooleanrequired
    • campaigns[].[].ageGatedContentbooleanrequired
    • campaigns[].[].leadGenerationbooleanrequired
    • campaigns[].[].numberPoolingRequiredbooleanrequired
    • campaigns[].[].termsAcceptedbooleanrequired

      Explicit true required; no default acceptance.

    • campaigns[].[].statusstringrequired
    • campaigns[].[].providerstringrequired
    • campaigns[].[].providerCampaignIdstring | nullrequired
    • campaigns[].[].errorstring | nullrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/messaging/campaigns?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save a pending campaign for a verified owned brand

POST/v1/dials/messaging/campaigns

dials:writeTested with an API keydials_createMessagingCampaign

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • brandIdstringrequired

    min length 1

  • namestringrequired

    min length 1

  • useCase"2fa" | "account_notification" | "customer_care" | "delivery_notification" | "fraud_alert" | "higher_education" | "marketing" | "polling_voting" | "public_service_announcement" | "security_alert" | "mixed"required
  • descriptionstringrequired

    Backend requires at least 40 trimmed UTF-8 bytes. min length 1

  • sampleMessagesstring[]required

    Backend trims and drops blank samples, then requires 2–5.

  • optInProcessstringrequired

    Backend requires at least 40 trimmed UTF-8 bytes. min length 1

  • helpMessagestringrequired

    Must contain HELP or INFO, case-insensitive. min length 1

  • optOutMessagestringrequired

    Must contain STOP, case-insensitive. min length 1

  • directLendingboolean

    default false

  • embeddedLinkboolean

    default false

  • embeddedPhoneboolean

    default false

  • ageGatedContentboolean

    default false

  • leadGenerationboolean

    default false

  • numberPoolingRequiredboolean

    default false

  • termsAcceptedbooleanrequired

    Explicit true required; no default acceptance.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • campaignobjectrequired
    • campaign.idstringrequired
    • campaign.scopeobjectrequired
    • campaign.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • campaign.scope.organizationIdstringrequired

      min length 1

    • campaign.scope.workspaceIdstringrequired

      min length 1

    • campaign.scope.projectIdstringrequired

      min length 1

    • campaign.scope.environmentIdstringrequired

      min length 1

    • campaign.brandIdstringrequired
    • campaign.namestringrequired
    • campaign.useCase"2fa" | "account_notification" | "customer_care" | "delivery_notification" | "fraud_alert" | "higher_education" | "marketing" | "polling_voting" | "public_service_announcement" | "security_alert" | "mixed"required
    • campaign.descriptionstringrequired
    • campaign.sampleMessagesstring[]required
    • campaign.optInProcessstringrequired
    • campaign.helpMessagestringrequired
    • campaign.optOutMessagestringrequired
    • campaign.directLendingbooleanrequired
    • campaign.embeddedLinkbooleanrequired
    • campaign.embeddedPhonebooleanrequired
    • campaign.ageGatedContentbooleanrequired
    • campaign.leadGenerationbooleanrequired
    • campaign.numberPoolingRequiredbooleanrequired
    • campaign.termsAcceptedbooleanrequired

      Explicit true required; no default acceptance.

    • campaign.statusstringrequired
    • campaign.providerstringrequired
    • campaign.providerCampaignIdstring | nullrequired
    • campaign.errorstring | nullrequired
    • auditIdstringrequired
    • nextstringrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 404Referenced resource is absent from the verified organization and selected scope.
  • 409Existing scoped resource/assignment or idempotency conflict.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/messaging/campaigns" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "brandId": "string",
    "name": "string",
    "useCase": "2fa",
    "description": "string",
    "sampleMessages": [
      "string"
    ],
    "optInProcess": "string",
    "helpMessage": "string",
    "optOutMessage": "string",
    "termsAccepted": true
  }'

Save pending association of an owned number with an owned campaign

POST/v1/dials/messaging/campaigns/{campaign_id}/numbers

dials:writeTested with an API keydials_assignCampaignNumber

Parameters

  • campaign_idpath · stringrequired

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • phoneNumberIdstringrequired

    min length 1

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • campaignIdstringrequired
    • phoneNumberIdstringrequired
    • auditIdstringrequired
    • nextstringrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 404Referenced resource is absent from the verified organization and selected scope.
  • 409Existing scoped resource/assignment or idempotency conflict.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/messaging/campaigns/$CAMPAIGN_ID/numbers" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "phoneNumberId": "string"
  }'

Numbers

List numbers in the authorized scope

GET/v1/dials/numbers

dials:readTested with an API keydials_listNumbers

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • numbersobject[]required
    • numbers[].[].idstringrequired
    • numbers[].[].e164stringrequired
    • numbers[].[].statusstringrequired
    • numbers[].[].providerstringrequired
    • numbers[].[].cnamStatusstring
    • numbers[].[].e911Statusstring
    • numbers[].[].releaseStatestring
    • numbers[].[].scopeobject
    • numbers[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • numbers[].[].scope.organizationIdstringrequired

      min length 1

    • numbers[].[].scope.workspaceIdstringrequired

      min length 1

    • numbers[].[].scope.projectIdstringrequired

      min length 1

    • numbers[].[].scope.environmentIdstringrequired

      min length 1

    • numbers[].[].assignedResourceIdstring | null
    • numbers[].[].assignedResourceKindstring | null
    • numbers[].[].providerNumberIdstring | null
    • numbers[].[].callerIdNamestring | null
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/numbers?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Release an owned number at its carrier through DELETE

DELETE/v1/dials/numbers/{number_id}

dials:writeTested with an API keydials_deleteNumber

Path number_id plus selected scope, actorId and optional reason in query. Uses the existing release implementation: carrier success/absence is checked before local release. A non-carrier-backed deployment can report unsupported release; inspect the returned number rather than infer carrier cancellation. Preserve uncertain replies and reconcile before retry.

Parameters

  • number_idpath · stringrequired
  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • actorIdquery · stringrequired
  • reasonquery · string
  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • numberobjectrequired
    • number.idstringrequired
    • number.e164stringrequired
    • number.statusstringrequired
    • number.providerstringrequired
    • number.cnamStatusstring
    • number.e911Statusstring
    • number.releaseStatestring
    • number.scopeobject
    • number.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • number.scope.organizationIdstringrequired

      min length 1

    • number.scope.workspaceIdstringrequired

      min length 1

    • number.scope.projectIdstringrequired

      min length 1

    • number.scope.environmentIdstringrequired

      min length 1

    • number.assignedResourceIdstring | null
    • number.assignedResourceKindstring | null
    • number.providerNumberIdstring | null
    • number.callerIdNamestring | null
    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 404Referenced resource is absent from the verified organization and selected scope.
  • 409Existing scoped resource/assignment or idempotency conflict.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 501Carrier release unsupported or unconfigured.
  • 502Carrier release unavailable or unconfirmed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X DELETE "https://os.one.ml/api/v1/dials/numbers/$NUMBER_ID?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID&actorId=$ACTOR_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Assign an owned number

POST/v1/dials/numbers/assign

dials:writeTested with an API keydials_assignNumber

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • numberIdstringrequired

    min length 1

  • resourceKind"agent_profile" | "human_profile" | null

    Only scoped human/agent targets are exposed. Omit or null both target fields to unassign.

  • resourceIdstring | null

Responses

  • 200Success
    Response fields

    A JSON object.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/numbers/assign" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "numberId": "string"
  }'

Update the caller name of an owned number

PUT/v1/dials/numbers/cnam

dials:writeTested with an API keydials_updateNumberCallerName

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired
  • numberIdstringrequired
  • callerIdNamestringrequired

    min length 1 · max length 15 · pattern ^[A-Za-z0-9 \-&.]+$

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • numberobjectrequired
    • number.idstringrequired
    • number.e164stringrequired
    • number.statusstringrequired
    • number.providerstringrequired
    • number.cnamStatusstring
    • number.e911Statusstring
    • number.releaseStatestring
    • number.scopeobject
    • number.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • number.scope.organizationIdstringrequired

      min length 1

    • number.scope.workspaceIdstringrequired

      min length 1

    • number.scope.projectIdstringrequired

      min length 1

    • number.scope.environmentIdstringrequired

      min length 1

    • number.assignedResourceIdstring | null
    • number.assignedResourceKindstring | null
    • number.providerNumberIdstring | null
    • number.callerIdNamestring | null
    • auditIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X PUT "https://os.one.ml/api/v1/dials/numbers/cnam" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "numberId": "string",
    "callerIdName": "string"
  }'

List scoped inventory drift

GET/v1/dials/numbers/drift

dials:readTested with an API keydials_listNumberDrift

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • driftobject[]required
    • drift[].[].idstringrequired
    • drift[].[].scopeobjectrequired
    • drift[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • drift[].[].scope.organizationIdstringrequired

      min length 1

    • drift[].[].scope.workspaceIdstringrequired

      min length 1

    • drift[].[].scope.projectIdstringrequired

      min length 1

    • drift[].[].scope.environmentIdstringrequired

      min length 1

    • drift[].[].reconciliationIdstringrequired
    • drift[].[].kindstringrequired
    • drift[].[].phoneNumberIdstring | nullrequired
    • drift[].[].e164Numberstringrequired
    • drift[].[].providerstringrequired
    • drift[].[].expectedstring | nullrequired
    • drift[].[].observedstring | nullrequired
    • drift[].[].resolvedbooleanrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/numbers/drift?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Register and bind the dispatchable emergency address for an owned number

POST/v1/dials/numbers/e911

dials:writeTested with an API keydials_registerEmergencyAddress

Register the operator-provided dispatchable address, or set statusOnly:true to check an existing saved binding with the identical address. A refresh performs carrier GETs only, persists the returned state locally, and requires dials:write. Pending, unsupported or uncertain status never permits a call; do not automatically correct the address or repeat provider writes.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • numberIdstringrequired

    min length 1

  • callerNamestringrequired

    min length 1

  • streetNumberstringrequired

    min length 1

  • streetNamestringrequired

    min length 1

  • citystringrequired

    min length 1

  • regionstringrequired

    min length 1

  • postalCodestringrequired

    min length 1

  • addressLine2string | null
  • countrystring | null

    Two-letter country code; omitted or null defaults to US. min length 2 · max length 2 · pattern ^[A-Za-z]{2}$

  • statusOnlyboolean

    Refresh only an already saved exact-address provider binding for the owned number in the selected scope. The carrier is read with GET only; no address creation, assignment or reassignment occurs. Local status/address/audit persistence still occurs and dials:write is required. Missing binding, changed address or unavailable/mismatched carrier binding fails closed. Omitted or false retains registration behavior. default false

Responses

  • 200Carrier registration result; unsupported status is not an active binding
    Response fields
    • okbooleanrequired
    • numberobjectrequired
    • number.idstringrequired
    • number.e164stringrequired
    • number.statusstringrequired
    • number.providerstringrequired
    • number.cnamStatusstring
    • number.e911Statusstring
    • number.releaseStatestring
    • number.scopeobject
    • number.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • number.scope.organizationIdstringrequired

      min length 1

    • number.scope.workspaceIdstringrequired

      min length 1

    • number.scope.projectIdstringrequired

      min length 1

    • number.scope.environmentIdstringrequired

      min length 1

    • number.assignedResourceIdstring | null
    • number.assignedResourceKindstring | null
    • number.providerNumberIdstring | null
    • number.callerIdNamestring | null
    • addressobjectrequired
    • address.scopeobjectrequired
    • address.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • address.scope.organizationIdstringrequired

      min length 1

    • address.scope.workspaceIdstringrequired

      min length 1

    • address.scope.projectIdstringrequired

      min length 1

    • address.scope.environmentIdstringrequired

      min length 1

    • address.idstringrequired
    • address.phoneNumberIdstringrequired
    • address.callerNamestringrequired
    • address.streetNumberstringrequired
    • address.streetNamestringrequired
    • address.citystringrequired
    • address.regionstringrequired
    • address.postalCodestringrequired
    • address.countrystringrequired
    • address.providerstringrequired
    • address.statusstringrequired
    • address.addressLine2string | null
    • address.providerAddressIdstring | null
    • address.validationStatusstring | null
    • address.errorstring | null
    • auditIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Number does not belong to the authenticated organization and selected scope
  • 422Carrier validation refusal. Suggestions are advisory: preserve the original address; explicitly edit and confirm before a new request. Never apply or submit candidates automatically. statusOnly additionally requires an exact saved binding; otherwise422 existing_emergency_binding_required. This mode never creates or assigns a carrier address.
  • 501Carrier does not support emergency address registration
  • 502Carrier registration failed
  • 503Backend unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/numbers/e911" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "numberId": "string",
    "callerName": "string",
    "streetNumber": "string",
    "streetName": "string",
    "city": "string",
    "region": "string",
    "postalCode": "string"
  }'

Provision a carrier number with an idempotency key

POST/v1/dials/numbers/provision

dials:writeFailed with an API keydials_provisionNumber

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • e164stringrequired

    min length 1

  • idempotencyKeystringrequired

    min length 1

Responses

  • 200Success
    Response fields

    A JSON object.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/numbers/provision" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "e164": "string",
    "idempotencyKey": "string"
  }'

Reconcile owned inventory against configured carriers

POST/v1/dials/numbers/reconcile

dials:writeTested with an API keydials_reconcileNumberInventory

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • reconciliationsobject[]required
    • reconciliations[].[].idstringrequired
    • reconciliations[].[].scopeobjectrequired
    • reconciliations[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • reconciliations[].[].scope.organizationIdstringrequired

      min length 1

    • reconciliations[].[].scope.workspaceIdstringrequired

      min length 1

    • reconciliations[].[].scope.projectIdstringrequired

      min length 1

    • reconciliations[].[].scope.environmentIdstringrequired

      min length 1

    • reconciliations[].[].providerstringrequired
    • reconciliations[].[].statusstringrequired
    • reconciliations[].[].carrierNumberCountintegerrequired

      min 0

    • reconciliations[].[].localNumberCountintegerrequired

      min 0

    • reconciliations[].[].driftCountintegerrequired

      min 0

    • reconciliations[].[].errorstring | nullrequired
    • driftobject[]required
    • drift[].[].idstringrequired
    • drift[].[].scopeobjectrequired
    • drift[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • drift[].[].scope.organizationIdstringrequired

      min length 1

    • drift[].[].scope.workspaceIdstringrequired

      min length 1

    • drift[].[].scope.projectIdstringrequired

      min length 1

    • drift[].[].scope.environmentIdstringrequired

      min length 1

    • drift[].[].reconciliationIdstringrequired
    • drift[].[].kindstringrequired
    • drift[].[].phoneNumberIdstring | nullrequired
    • drift[].[].e164Numberstringrequired
    • drift[].[].providerstringrequired
    • drift[].[].expectedstring | nullrequired
    • drift[].[].observedstring | nullrequired
    • drift[].[].resolvedbooleanrequired
    • orphanCountintegerrequired

      min 0

    • auditIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/numbers/reconcile" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string"
  }'

List scoped carrier reconciliation receipts

GET/v1/dials/numbers/reconciliations

dials:readTested with an API keydials_listNumberReconciliations

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • reconciliationsobject[]required
    • reconciliations[].[].idstringrequired
    • reconciliations[].[].scopeobjectrequired
    • reconciliations[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • reconciliations[].[].scope.organizationIdstringrequired

      min length 1

    • reconciliations[].[].scope.workspaceIdstringrequired

      min length 1

    • reconciliations[].[].scope.projectIdstringrequired

      min length 1

    • reconciliations[].[].scope.environmentIdstringrequired

      min length 1

    • reconciliations[].[].providerstringrequired
    • reconciliations[].[].statusstringrequired
    • reconciliations[].[].carrierNumberCountintegerrequired

      min 0

    • reconciliations[].[].localNumberCountintegerrequired

      min 0

    • reconciliations[].[].driftCountintegerrequired

      min 0

    • reconciliations[].[].errorstring | nullrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/numbers/reconciliations?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Release an owned number

POST/v1/dials/numbers/release

dials:writeTested with an API keydials_releaseNumber

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • numberIdstringrequired

    min length 1

  • reasonstring

Responses

  • 200Success
    Response fields

    A JSON object.

  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/numbers/release" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "numberId": "string"
  }'

Search real carrier number inventory

GET/v1/dials/numbers/search

dials:readTested with an API keydials_searchNumbers

Pass at least one search filter, such as areaCode; a search with none answers 400 invalid_number_search.

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • areaCodequery · string
  • exchangeCodequery · string
  • startsWithquery · string

    At least three national digits; SignalWire receives at most seven and the full requested prefix is checked locally.

  • endsWithquery · string
  • containsquery · string
  • repeatingDigitquery · string
  • repeatingDigitCountquery · integer
  • numberTypequery · "local" | "toll-free"
  • distancequery · integer
  • limitquery · integer
  • localCallingAreaquery · boolean
  • excludeAddressRequiredquery · boolean
  • excludeLocalAddressRequiredquery · boolean
  • excludeForeignAddressRequiredquery · boolean
  • betaquery · boolean
  • voicequery · boolean
  • smsquery · boolean
  • mmsquery · boolean
  • faxquery · boolean
  • regionquery · string
  • localityquery · string
  • postalCodequery · string
  • rateCenterquery · string
  • lataquery · string
  • nearNumberquery · string
  • nearLatLongquery · string

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • numbersobject[]required
    • numbers[].[].regionstring | nullrequired
    • numbers[].[].rateCenterstring | nullrequired
    • numbers[].[].localitystring | nullrequired
    • numbers[].[].postalCodestring | nullrequired
    • numbers[].[].latastring | nullrequired
    • numbers[].[].numberTypestring | nullrequired
    • numbers[].[].addressRequirementsstring | nullrequired
    • numbers[].[].providerReferencestring | nullrequired
    • numbers[].[].latitudenumber | nullrequired
    • numbers[].[].longitudenumber | nullrequired
    • numbers[].[].betaboolean | nullrequired
    • numbers[].[].monthlyCostCentsintegerrequired

      min 0

    • numbers[].[].inboundPerMinuteMicrosintegerrequired

      min 0

    • numbers[].[].outboundPerMinuteMicrosintegerrequired

      min 0

    • numbers[].[].e911MonthlyCostCentsinteger | nullrequired

      min 0

    • numbers[].[].e164stringrequired
    • numbers[].[].countryCodestringrequired
    • numbers[].[].providerstringrequired
    • numbers[].[].capabilitiesobjectrequired
    • numbers[].[].capabilities.voicebooleanrequired
    • numbers[].[].capabilities.smsbooleanrequired
    • numbers[].[].capabilities.mmsbooleanrequired
    • numbers[].[].capabilities.faxbooleanrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/numbers/search?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID&areaCode=415" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Routing

List managed inbound policies in the verified scope

GET/v1/dials/routing/rules

dials:readTested with an API keydials_listRoutingRules

Includes enabled and disabled managed policies; workflow descriptors are separate. Reads do not reconcile an unconfirmed original creation request.

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Authenticated scoped result; not proof of an inbound call
    Response fields
    • oktruerequired
    • scopeobjectrequired
    • scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • scope.organizationIdstringrequired

      min length 1

    • scope.workspaceIdstringrequired

      min length 1

    • scope.projectIdstringrequired

      min length 1

    • scope.environmentIdstringrequired

      min length 1

    • rulesobject[]required
    • rules[].[].idstringrequired

      min length 1 · max length 128

    • rules[].[].scopeobjectrequired
    • rules[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • rules[].[].scope.organizationIdstringrequired

      min length 1

    • rules[].[].scope.workspaceIdstringrequired

      min length 1

    • rules[].[].scope.projectIdstringrequired

      min length 1

    • rules[].[].scope.environmentIdstringrequired

      min length 1

    • rules[].[].namestringrequired

      min length 1 · max length 128

    • rules[].[].phoneNumberIdstringrequired

      min length 1 · max length 128

    • rules[].[].didstringrequired

      pattern ^\+[1-9]\d{7,14}$

    • rules[].[].priorityintegerrequired

      min 0 · max 10000

    • rules[].[].enabledbooleanrequired
    • rules[].[].actionobject | object | object | objectrequired
  • 400Invalid scope or request shape
  • 401Missing or invalid verified identity
  • 404Number or managed rule not found in the authorized scope
  • 409Original UUID conflicts with stored request, rule name exists, or stored record is invalid
  • 422Invalid action, destination, priority or creation UUID
  • 500Routing store failed; preserve the original request
  • 503Backend unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/routing/rules?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Create an enabled owned-number inbound policy with durable UUID idempotency

POST/v1/dials/routing/rules

dials:writedials_createRoutingRule

Uses an active owned number. Bridge connects to an explicit E.164 other than the source. Answer parks a channel; echo is diagnostic; neither runs an agent. Highest priority wins. A UUID is bound to the complete normalized body and verified actor. A replay returns the immutable original creation snapshot, even if the rule was subsequently disabled or the number released; it does not reactivate or assert current state. Lost acknowledgements must preserve the exact original body and UUID; there is no automatic retry.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstring

    Optional compatibility field; the backend derives the actual actor from the verified method-bound gateway identity and never trusts this value.

  • namestringrequired

    min length 1 · max length 128

  • phoneNumberIdstringrequired

    min length 1 · max length 128

  • priorityintegerrequired

    min 0 · max 10000

  • idempotencyKeystring (uuid)required

    Canonical UUID, persisted with the complete original body before the first POST. Reuse only for the exact same original request.

  • actionobject | object | object | objectrequired

Responses

  • 200Authenticated scoped result; not proof of an inbound call
    Response fields
    • oktruerequired
    • ruleobjectrequired
    • rule.idstringrequired

      min length 1 · max length 128

    • rule.scopeobjectrequired
    • rule.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • rule.scope.organizationIdstringrequired

      min length 1

    • rule.scope.workspaceIdstringrequired

      min length 1

    • rule.scope.projectIdstringrequired

      min length 1

    • rule.scope.environmentIdstringrequired

      min length 1

    • rule.namestringrequired

      min length 1 · max length 128

    • rule.phoneNumberIdstringrequired

      min length 1 · max length 128

    • rule.didstringrequired

      pattern ^\+[1-9]\d{7,14}$

    • rule.priorityintegerrequired

      min 0 · max 10000

    • rule.enabledbooleanrequired
    • rule.actionobject | object | object | objectrequired
    • auditIdstringrequired

      min length 1 · max length 128

    • idempotentReplaybooleanrequired
  • 400Invalid scope or request shape
  • 401Missing or invalid verified identity
  • 404Number or managed rule not found in the authorized scope
  • 409Original UUID conflicts with stored request, rule name exists, or stored record is invalid
  • 422Invalid action, destination, priority or creation UUID
  • 500Routing store failed; preserve the original request
  • 503Backend unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/routing/rules" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "name": "string",
    "phoneNumberId": "string",
    "priority": 0,
    "idempotencyKey": "00000000-0000-4000-8000-000000000000",
    "action": {
      "type": "bridge",
      "targetE164": "string"
    }
  }'

Disable an owned managed inbound policy while retaining its record

DELETE/v1/dials/routing/rules/{rule_id}

dials:writedials_disableRoutingRule

Soft-disables only the managed rule in the verified org/workspace/project/environment. Repeating the exact DELETE is idempotent; returns the retained disabled rule and audit receipt. Workflow descriptors and foreign rules are not modified. Scope is required in the JSON body, not query parameters.

Parameters

  • rule_idpath · stringrequired

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstring | null

    Optional compatibility field; actual actor comes from the verified gateway identity.

Responses

  • 200Authenticated scoped result; not proof of an inbound call
    Response fields
    • oktruerequired
    • ruleobjectrequired
    • rule.idstringrequired

      min length 1 · max length 128

    • rule.scopeobjectrequired
    • rule.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • rule.scope.organizationIdstringrequired

      min length 1

    • rule.scope.workspaceIdstringrequired

      min length 1

    • rule.scope.projectIdstringrequired

      min length 1

    • rule.scope.environmentIdstringrequired

      min length 1

    • rule.namestringrequired

      min length 1 · max length 128

    • rule.phoneNumberIdstringrequired

      min length 1 · max length 128

    • rule.didstringrequired

      pattern ^\+[1-9]\d{7,14}$

    • rule.priorityintegerrequired

      min 0 · max 10000

    • rule.enabledbooleanrequired
    • rule.actionobject | object | object | objectrequired
    • auditIdstring | nullrequired

      Recorded disable audit ID, or null for an already-disabled imported record with no recorded disable audit.

    • idempotentReplaybooleanrequired
  • 400Invalid scope or request shape
  • 401Missing or invalid verified identity
  • 404Number or managed rule not found in the authorized scope
  • 409Original UUID conflicts with stored request, rule name exists, or stored record is invalid
  • 422Invalid action, destination, priority or creation UUID
  • 500Routing store failed; preserve the original request
  • 503Backend unavailable
  • 4xx 5xxThe error envelope.
curl -X DELETE "https://os.one.ml/api/v1/dials/routing/rules/$RULE_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    }
  }'

Voice profiles

List saved voiceProfiles in the selected scope

GET/v1/dials/voice-profiles

dials:readTested with an API keydials_listVoiceProfiles

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • voiceProfilesobject[]required
    • voiceProfiles[].[].idstringrequired
    • voiceProfiles[].[].scopeobjectrequired
    • voiceProfiles[].[].scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • voiceProfiles[].[].scope.organizationIdstringrequired

      min length 1

    • voiceProfiles[].[].scope.workspaceIdstringrequired

      min length 1

    • voiceProfiles[].[].scope.projectIdstringrequired

      min length 1

    • voiceProfiles[].[].scope.environmentIdstringrequired

      min length 1

    • voiceProfiles[].[].namestringrequired
    • voiceProfiles[].[].modelIdstringrequired
    • voiceProfiles[].[].profileKind"synthetic" | "cloned" | "bring_your_own"required
    • voiceProfiles[].[].languagestringrequired
    • voiceProfiles[].[].latencyBudgetMsintegerrequired
    • voiceProfiles[].[].consentRecordIdstring | nullrequired
    • voiceProfiles[].[].watermarkRequiredbooleanrequired
    • voiceProfiles[].[].commercialLicenseAttestedbooleanrequired
    • voiceProfiles[].[].deploymentTier"production" | "benchmark" | "edge"required
    • voiceProfiles[].[].statusstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/voice-profiles?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save an unassigned VoiceProfile by scoped normalized name

POST/v1/dials/voice-profiles

dials:writeTested with an API keydials_createVoiceProfile

This POST upserts by full scope and trimmed,lowercased name. Omitted optional fields reset. Create unassigned and assign a number separately; never replay creation after an assignment failure. No invitation,model deployment or consent verification is implied.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • namestringrequired

    min length 1

  • modelId"chatterbox-turbo" | "cosyvoice-2-05b" | "fish-audio-s2" | "kokoro-82m" | "dials-blockwise-mimi"required
  • profileKind"synthetic" | "cloned" | "bring_your_own" | null
  • languagestring | null

    min length 2 · max length 16 · pattern ^(?=.*[A-Za-z])[A-Za-z0-9-]+$

  • latencyBudgetMsinteger | null

    min 50 · max 1000

  • consentRecordIdstring | null

    Real reference required for cloned/BYO. Backend validates presence, not registry ownership.

  • watermarkRequiredboolean | null

    Defaults true and must be true for cloned/BYO.

  • commercialLicenseAttestedboolean | null

    Defaults false. Explicit attestation required for production Fish Audio.

  • deploymentTier"production" | "benchmark" | "edge" | null

Responses

  • 200Success
    Response fields
    • okbooleanrequired
    • voiceProfileobjectrequired
    • voiceProfile.idstringrequired
    • voiceProfile.scopeobjectrequired
    • voiceProfile.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • voiceProfile.scope.organizationIdstringrequired

      min length 1

    • voiceProfile.scope.workspaceIdstringrequired

      min length 1

    • voiceProfile.scope.projectIdstringrequired

      min length 1

    • voiceProfile.scope.environmentIdstringrequired

      min length 1

    • voiceProfile.namestringrequired
    • voiceProfile.modelIdstringrequired
    • voiceProfile.profileKind"synthetic" | "cloned" | "bring_your_own"required
    • voiceProfile.languagestringrequired
    • voiceProfile.latencyBudgetMsintegerrequired
    • voiceProfile.consentRecordIdstring | nullrequired
    • voiceProfile.watermarkRequiredbooleanrequired
    • voiceProfile.commercialLicenseAttestedbooleanrequired
    • voiceProfile.deploymentTier"production" | "benchmark" | "edge"required
    • voiceProfile.statusstringrequired
    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
  • 401Missing or invalid identity
  • 404Resource does not belong to the authenticated organization
  • 422Invalid profile fields, missing consent/license attestation, or unsupported production model
  • 503Backend or carrier unavailable
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/voice-profiles" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "name": "string",
    "modelId": "chatterbox-turbo"
  }'

Workflows

List scoped saved workflow routing descriptors

GET/v1/dials/workflows

dials:readTested with an API keydials_listWorkflows

Parameters

  • organizationIdquery · stringrequired

    Must match the authenticated organization.

  • workspaceIdquery · stringrequired

    Selected Dials scope.

  • projectIdquery · stringrequired

    Selected Dials scope.

  • environmentIdquery · stringrequired

    Selected Dials scope.

  • platformIdquery · string

    Selected data platform. Omitted defaults to dials in the backend; selection does not grant organization authority.

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • workflowsobject[]required
    • workflows[].[].idstringrequired

      min length 1

    • workflows[].[].namestringrequired

      min length 1

    • workflows[].[].descriptionstringrequired
    • workflows[].[].nodesobject[]required
    • workflows[].[].nodes[].[].idstringrequired

      min length 1

    • workflows[].[].nodes[].[].labelstringrequired

      min length 1

    • workflows[].[].nodes[].[].kindstringrequired

      Stored node descriptor; this API does not validate a supported execution engine kind. min length 1

    • workflows[].[].nodes[].[].descriptionstringrequired
    • workflows[].[].nodes[].[].statusstringrequired
    • workflows[].[].nodes[].[].xinteger (int32)required
    • workflows[].[].nodes[].[].yinteger (int32)required
    • workflows[].[].edgesobject[]required
    • workflows[].[].edges[].[].idstringrequired

      min length 1

    • workflows[].[].edges[].[].sourcestringrequired

      min length 1

    • workflows[].[].edges[].[].targetstringrequired

      min length 1

    • workflows[].[].edges[].[].labelstringrequired
    • workflows[].[].statusstring

      default "draft"

    • workflows[].[].routeIdstring | null
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl "https://os.one.ml/api/v1/dials/workflows?organizationId=$ORGANIZATION_ID&workspaceId=$WORKSPACE_ID&projectId=$PROJECT_ID&environmentId=$ENVIRONMENT_ID" \
  -H "Authorization: Bearer $GENESIS_API_KEY"

Save a normalized workflow and enabled routing descriptor

POST/v1/dials/workflows/deploy

dials:writeTested with an API keydials_deployWorkflow

Upsert by selected scope/workflow ID. A deployed descriptor is not proof of arbitrary graph or media execution.

Request body application/json

  • scopeobjectrequired
  • scope.platformId"dials"

    Dials platform identifier; defaults to dials when omitted.

  • scope.organizationIdstringrequired

    min length 1

  • scope.workspaceIdstringrequired

    min length 1

  • scope.projectIdstringrequired

    min length 1

  • scope.environmentIdstringrequired

    min length 1

  • actorIdstringrequired

    min length 1

  • workflowobjectrequired

    Graph configuration. Backend normalizes labels, requires nonempty nodes and checks edge endpoints. It saves an enabled routing-rule descriptor; status deployed does not establish that arbitrary node logic executed.

  • workflow.idstringrequired

    min length 1

  • workflow.namestringrequired

    min length 1

  • workflow.descriptionstringrequired
  • workflow.nodesobject[]required
  • workflow.nodes[].[].idstringrequired

    min length 1

  • workflow.nodes[].[].labelstringrequired

    min length 1

  • workflow.nodes[].[].kindstringrequired

    Stored node descriptor; this API does not validate a supported execution engine kind. min length 1

  • workflow.nodes[].[].descriptionstringrequired
  • workflow.nodes[].[].statusstringrequired
  • workflow.nodes[].[].xinteger (int32)required
  • workflow.nodes[].[].yinteger (int32)required
  • workflow.edgesobject[]required
  • workflow.edges[].[].idstringrequired

    min length 1

  • workflow.edges[].[].sourcestringrequired

    min length 1

  • workflow.edges[].[].targetstringrequired

    min length 1

  • workflow.edges[].[].labelstringrequired
  • workflow.statusstring

    default "draft"

  • workflow.routeIdstring | null

Responses

  • 200Actual durable operation result; no carrier delivery or graph execution is inferred.
    Response fields
    • okbooleanrequired
    • workflowobjectrequired

      Graph configuration. Backend normalizes labels, requires nonempty nodes and checks edge endpoints. It saves an enabled routing-rule descriptor; status deployed does not establish that arbitrary node logic executed.

    • workflow.idstringrequired

      min length 1

    • workflow.namestringrequired

      min length 1

    • workflow.descriptionstringrequired
    • workflow.nodesobject[]required
    • workflow.nodes[].[].idstringrequired

      min length 1

    • workflow.nodes[].[].labelstringrequired

      min length 1

    • workflow.nodes[].[].kindstringrequired

      Stored node descriptor; this API does not validate a supported execution engine kind. min length 1

    • workflow.nodes[].[].descriptionstringrequired
    • workflow.nodes[].[].statusstringrequired
    • workflow.nodes[].[].xinteger (int32)required
    • workflow.nodes[].[].yinteger (int32)required
    • workflow.edgesobject[]required
    • workflow.edges[].[].idstringrequired

      min length 1

    • workflow.edges[].[].sourcestringrequired

      min length 1

    • workflow.edges[].[].targetstringrequired

      min length 1

    • workflow.edges[].[].labelstringrequired
    • workflow.statusstring

      default "draft"

    • workflow.routeIdstring | null
    • auditIdstringrequired
    • usageEventIdstringrequired
    • nextstringrequired
    • routeobjectrequired
    • route.idstringrequired

      min length 1 · max length 128

    • route.scopeobjectrequired
    • route.scope.platformId"dials"

      Dials platform identifier; defaults to dials when omitted.

    • route.scope.organizationIdstringrequired

      min length 1

    • route.scope.workspaceIdstringrequired

      min length 1

    • route.scope.projectIdstringrequired

      min length 1

    • route.scope.environmentIdstringrequired

      min length 1

    • route.namestringrequired

      min length 1 · max length 128

    • route.phoneNumberIdstringrequired

      min length 1 · max length 128

    • route.didstringrequired

      pattern ^\+[1-9]\d{7,14}$

    • route.priorityintegerrequired

      min 0 · max 10000

    • route.enabledbooleanrequired
    • route.actionobject | object | object | objectrequired
  • 400Invalid selected scope or request shape.
  • 401Missing or invalid verified identity.
  • 403Selected scope is not authorized by signed identity or lacks the required Dials grant.
  • 422Validation or approval requirement refused.
  • 500Durable store failed.
  • 503Backend is not ready.
  • 4xx 5xxThe error envelope.
curl -X POST "https://os.one.ml/api/v1/dials/workflows/deploy" \
  -H "Authorization: Bearer $GENESIS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "scope": {
      "organizationId": "string",
      "workspaceId": "string",
      "projectId": "string",
      "environmentId": "string"
    },
    "actorId": "string",
    "workflow": {
      "id": "string",
      "name": "string",
      "description": "string",
      "nodes": [
        {
          "id": "string",
          "label": "string",
          "kind": "string",
          "description": "string",
          "status": "string",
          "x": 1,
          "y": 1
        }
      ],
      "edges": []
    }
  }'

One Superintelligence, Inc. · Built from Genesis 0.1.12 and the live gateway on 2026-10-20. Support