Public demo. Data resets daily at 3:00 UTC. Don't store anything sensitive.

customer-onboarding

v1.0 active

Onboard a new business customer for cross-border banking

View instances
Owner
banking-team
SLA
72h
Trigger
api
Tags
bankingonboardingcompliancekyb

Inputs

company_name
string · required
contact_email
string · required
country
enum · required
US MX
source_channel
enum
website linkedin email referral cold-outbound
deal_id
string

External CRM reference

Outputs

account_id
string
member_id
string
status
enum
approved rejected
rejection_reason
string

Steps

  1. 1

    Collect business information

    collect-business-info form

    Gather company details, ownership, fiscal address

    Inputs
    company_name process.inputs.company_name contact_email process.inputs.contact_email
    Outputs
    business_record (object)
  2. 2

    Verify KYB documents

    verify-documents automated

    Check uploaded documents against requirements

    Inputs
    business_record steps.collect-business-info.outputs.business_record
    Outputs
    verification_result (enum) missing_documents (string[])
    script: ./examples/steps/verify-documents.rb
  3. 3

    Review application

    review-application judgment

    Assess risk and decide whether to approve

    Inputs
    business_record steps.collect-business-info.outputs.business_record verification_result steps.verify-documents.outputs.verification_result
    Outputs
    decision (enum) risk_notes (string) rejection_reason (string)
    threshold: 0.9 escalation: manual
  4. 4

    Submit to compliance provider

    submit-to-compliance webhook if steps.review-application.outputs.decision == 'approve'
    Inputs
    business_record steps.collect-business-info.outputs.business_record
    Outputs
    entity_id (string) compliance_status (enum)
    url: ${COMPLIANCE_PROVIDER_URL}/entities
    method: POST mode: callback
  5. 5

    Create customer account

    create-account automated if steps.submit-to-compliance.outputs.compliance_status == 'approved'
    Inputs
    business_record steps.collect-business-info.outputs.business_record entity_id steps.submit-to-compliance.outputs.entity_id
    Outputs
    account_id (string) member_id (string)
    script: ./examples/steps/create-account.rb
  6. 6

    Send welcome email

    send-welcome notification
    Inputs
    contact_email process.inputs.contact_email account_id steps.create-account.outputs.account_id
    Outputs
    email_sent (boolean)
Raw definition
---
opensop: '0.1'
process:
  sla:
    target: 72h
    warning: 48h
  name: customer-onboarding
  tags:
  - banking
  - onboarding
  - compliance
  - kyb
  owner: banking-team
  steps:
  - id: collect-business-info
    name: Collect business information
    type: form
    inputs:
    - from: process.inputs.company_name
      name: company_name
    - from: process.inputs.contact_email
      name: contact_email
    outputs:
    - name: business_record
      type: object
      schema:
        rfc: string
        industry: string
        legal_name: string
        annual_revenue: number
        fiscal_address: string
    timeout: 7d
    on_timeout: notify-and-wait
    description: Gather company details, ownership, fiscal address
  - id: verify-documents
    run: "./examples/steps/verify-documents.rb"
    name: Verify KYB documents
    type: automated
    retry:
      max: 3
      backoff: exponential
    inputs:
    - from: steps.collect-business-info.outputs.business_record
      name: business_record
    outputs:
    - name: verification_result
      type: enum
      values:
      - complete
      - incomplete
      - invalid
    - name: missing_documents
      type: string[]
    validation: lenient
    description: Check uploaded documents against requirements
  - id: review-application
    name: Review application
    type: judgment
    inputs:
    - from: steps.collect-business-info.outputs.business_record
      name: business_record
    - from: steps.verify-documents.outputs.verification_result
      name: verification_result
    outputs:
    - name: decision
      type: enum
      values:
      - approve
      - reject
      - request-more-info
    - name: risk_notes
      type: string
    - name: rejection_reason
      type: string
      required_if: decision == 'reject'
    judgment:
      escalation: manual
      allow_agent: true
      confidence_threshold: 0.9
      require_human_review: false
    description: Assess risk and decide whether to approve
  - id: submit-to-compliance
    name: Submit to compliance provider
    type: webhook
    inputs:
    - from: steps.collect-business-info.outputs.business_record
      name: business_record
    outputs:
    - name: entity_id
      type: string
    - name: compliance_status
      type: enum
      values:
      - pending
      - approved
      - rejected
    webhook:
      url: "${COMPLIANCE_PROVIDER_URL}/entities"
      method: POST
      headers:
        Authorization: Bearer ${COMPLIANCE_API_KEY}
      poll_timeout: 7d
      callback_path: "/sop/webhooks/compliance"
      response_mode: callback
    condition: steps.review-application.outputs.decision == 'approve'
  - id: create-account
    run: "./examples/steps/create-account.rb"
    name: Create customer account
    type: automated
    inputs:
    - from: steps.collect-business-info.outputs.business_record
      name: business_record
    - from: steps.submit-to-compliance.outputs.entity_id
      name: entity_id
    outputs:
    - name: account_id
      type: string
    - name: member_id
      type: string
    condition: steps.submit-to-compliance.outputs.compliance_status == 'approved'
    validation: lenient
  - id: send-welcome
    name: Send welcome email
    type: notification
    inputs:
    - from: process.inputs.contact_email
      name: contact_email
    - from: steps.create-account.outputs.account_id
      name: account_id
    outputs:
    - name: email_sent
      type: boolean
  inputs:
  - name: company_name
    type: string
    required: true
  - name: contact_email
    type: string
    format: email
    required: true
  - name: country
    type: enum
    values:
    - US
    - MX
    required: true
  - name: source_channel
    type: enum
    values:
    - website
    - linkedin
    - email
    - referral
    - cold-outbound
  - name: deal_id
    type: string
    description: External CRM reference
  outputs:
  - from: steps.create-account.outputs.account_id
    name: account_id
    type: string
  - from: steps.create-account.outputs.member_id
    name: member_id
    type: string
  - from: steps.submit-to-compliance.outputs.compliance_status
    name: status
    type: enum
    values:
    - approved
    - rejected
  - from: steps.review-application.outputs.rejection_reason
    name: rejection_reason
    type: string
    required_if: status == 'rejected'
  trigger:
    type: api
  version: '1.0'
  on_error:
    notify:
      target: "#banking-ops"
      channel: slack
  description: Onboard a new business customer for cross-border banking