Skip to main content

Quick Start

Submit your first agent action for authorization in under 5 minutes.

Prerequisites

  • Python 3.9+ or Node.js 18+
  • An ASCEND account with API key

Step 1: Get Your API Key

  1. Log in to the ASCEND Dashboard
  2. Navigate to SettingsAPI Keys
  3. Click Generate New Key
  4. Copy the key (shown only once)
Important

API keys are shown only once during generation. Store them securely in environment variables or a secrets manager.

Step 2: Install the SDK

pip install ascend-ai-sdk

Step 3: Submit Your First Action

from ascend import AscendClient, Decision, FailMode

# Initialize client
client = AscendClient(
api_key="owkai_your_api_key_here",
agent_id="my-agent-001",
agent_name="My AI Agent",
fail_mode=FailMode.CLOSED
)

# Register agent
client.register(
agent_type="automation",
capabilities=["database.query", "api.call"]
)

# Submit an action for authorization
decision = client.evaluate_action(
action_type="database.query",
resource="customer_database",
parameters={"query": "SELECT name FROM customers WHERE id = 123"}
)

# Handle the decision
if decision.decision == Decision.ALLOWED:
print(f"Approved (risk: {decision.risk_score})")
# Execute your action here
client.log_action_completed(
action_id=decision.action_id,
result={"rows_returned": 1},
duration_ms=45
)

elif decision.decision == Decision.PENDING:
print(f"Awaiting approval: {decision.approval_request_id}")

elif decision.decision == Decision.DENIED:
print(f"Denied: {decision.reason}")
print(f"Policy violations: {decision.policy_violations}")

Step 4: Handle Responses

Every action evaluation returns an AuthorizationDecision with these key fields:

FieldTypeDescription
decisionDecisionALLOWED, DENIED, or PENDING
action_idstrUnique action identifier
risk_scoreintRisk score (0–100)
reasonstrExplanation of decision
policy_violationslistViolated policies (if denied)
approval_request_idstrApproval tracking ID (if pending)

Complete Example

"""Customer service agent with ASCEND governance"""
from ascend import AscendClient, Decision, FailMode
import time

client = AscendClient(
api_key="owkai_prod_xxxxxxxxxxxx",
agent_id="customer-service-agent",
agent_name="Customer Service Bot",
fail_mode=FailMode.CLOSED,
)

client.register(
agent_type="automation",
capabilities=["transaction.refund", "customer.lookup"],
allowed_resources=["stripe_api", "customer_db"],
)


def process_refund(customer_id: str, amount: float) -> dict:
"""Process a refund with governance."""
decision = client.evaluate_action(
action_type="transaction.refund",
resource="stripe_api",
parameters={"customer_id": customer_id, "amount": amount, "currency": "USD"},
risk_indicators={"financial_data": True, "amount_threshold": "normal"},
)

if decision.decision == Decision.ALLOWED:
start = time.time()
result = {"refund_id": "ref_123", "status": "processed", "amount": amount}
client.log_action_completed(
action_id=decision.action_id,
result=result,
duration_ms=int((time.time() - start) * 1000),
)
return result

elif decision.decision == Decision.PENDING:
return {"status": "pending_approval", "approval_id": decision.approval_request_id}

else:
return {"status": "denied", "reason": decision.reason}


result = process_refund("cust_123", 150.00)
print(result)

What's Next?

Need Help?