Automations via API
Below is the step by step guide on calling your automations by using CodeWords API.
1. Get Your API Key
First, obtain your API key from the CodeWords Dashboard.
API Key Types:
cwk-
- Standard reusable keys (recommended)cwotk-
- One-time keys (for sensitive operations)
2. Basic API Information
Base URL: https://runtime.codewords.ai
Authentication: Include this header in all requests:
codeAuthorization: Bearer YOUR_API_KEY_HERE
Content Type: Always use:
codeContent-Type: application/json

3. Synchronous API Calls (≤120 seconds)
Use for workflows that complete quickly (under 2 minutes).
cURL Example:
bash
curl -X POST https://runtime.codewords.ai/run/YOUR_SERVICE_ID \
-H "Authorization: Bearer cwk-your-api-key-here" \
-H "Content-Type: application/json" \
-d '{ "input_field_1": "value1", "input_field_2": "value2" }'
Python Example:
python
#Install: pip install codewords client
import os from codewords_client
import AsyncCodewordsClient
async def call_workflow():
async with AsyncCodewordsClient() as client: response = await client.run( service_id="your-service-id", inputs={ "input_field_1": "value1", "input_field_2": "value2" } ) response.raise_for_status()
return response.json() # Usage import asyncio result = asyncio.run(call_workflow()) print(result)
JavaScript/TypeScript Example:
//Install: npm install @codewords/client
import { createServiceClient } from "@codewords/client"; const client = createServiceClient(process.env.CODEWORDS_API_KEY); async function callWorkflow() { const result = await client.runService( "your-service-id", "",
// path (empty for main endpoint)
{ input_field_1: "value1", input_field_2: "value2" } ); return result; }
4. Asynchronous API Calls (>120 seconds)
Use for long-running workflows to avoid timeouts.
cURL Example:
# 1. Start async execution
curl -X POST https://runtime.codewords.ai/run_async/YOUR_SERVICE_ID \ -H "Authorization: Bearer cwk-your-api-key-here" \ -H "Content-Type: application/json" \ -d '{"input_field": "value"}'
# Response: {"request_id": "req_abc123def456"}
# 2. Poll for results
curl -X GET "https://runtime.codewords.ai/result/req_abc123def456" \ -H "Authorization: Bearer cwk-your-api-key-here"
# 3. Stream logs (optional)
curl -X GET "https://runtime.codewords.ai/logs/req_abc123def456" \ -H "Authorization: Bearer cwk-your-api-key-here" \ -H "Accept: text/event-stream"
Python Example:
async def call_workflow_async(): async with AsyncCodewordsClient() as client:
# Start async execution
handle = await client.run( service_id="your-service-id", inputs={"input_field": "value"}, in_background=True ) print(f"Started: {handle.request_id}")
# Wait for completion (10 minute timeout)
response = await handle.result(timeout_seconds=600) return response.json()
JavaScript Example:
async function callWorkflowAsync() { // Start async execution
const requestId = await client.runAsync( "your-service-id", "", { input_field: "value" } ); console.log(`Started: ${requestId}`);
// Poll for results (10 minute timeout)
const result = await client.pollResult(600000); return result.responseJson; }
5. File Upload Workflow
For workflows that need file inputs:
cURL Example:
# 1. Create file upload
curl -X POST "https://runtime.codewords.ai/file?filename=data.csv" \ -H "Authorization: Bearer cwk-your-api-key-here"
# Response: {"upload_uri": "...", "download_uri": "..."}
# 2. Upload file content
curl -X PUT "UPLOAD_URI_FROM_STEP_1" \ -H "Content-Type: text/csv" \ -H "x-amz-acl: public-read" \ --data-binary @data.csv
# 3. Use download URL in workflow call
curl -X POST https://runtime.codewords.ai/run/your-service-id \ -H "Authorization: Bearer cwk-your-api-key-here" \ -H "Content-Type: application/json" \ -d '{"file_input": "DOWNLOAD_URI_FROM_STEP_1"}'
Python Example:
async def upload_and_process_file(file_path: str):
async with AsyncCodewordsClient() as client:
file with open(file_path, 'rb') as f:
file_content = f.read()
download_url = await client.upload_file_content(filename="data.csv", file_content=file_content)
# Process with workflow
response = await client.run( service_id="your-service-id", inputs={"file_input": download_url} )
return response.json()
6. Error Handling Best Practices
Handle Timeouts:
try: response = await client.run(service_id="your-service", inputs=data)
response.raise_for_status()
return response.json()
except Exception as e:
if "504" in str(e) or "timeout" in str(e).lower():
# Switch to async for long-running tasks
handle = await client.run(service_id="your-service", inputs=data, in_background=True)
response = await handle.result(timeout_seconds=600)
return response.json() raise
Implement Retries:
async def robust_call(service_id: str, inputs: dict, max_retries: int = 3):
for attempt in range(max_retries):
try:
async with AsyncCodewordsClient() as client:
response = await client.run(service_id=service_id, inputs=inputs)
response.raise_for_status()
return response.json()
except Exception as e:
if attempt == max_retries - 1:
raise await asyncio.sleep(2 ** attempt) # Exponential backoff
7. Environment Setup
Set API Key as Environment Variable:
Linux/Mac:
bashexport CODEWORDS_API_KEY=cwk-your-api-key-here
Windows:
cmdset CODEWORDS_API_KEY=cwk-your-api-key-here
8. Security Best Practices
Store API keys securely as environment variables
Never expose API keys in client-side code
Use HTTPS only (CodeWords enforces this)
Implement rate limiting in your application
Validate inputs before sending to CodeWords
Use one-time keys for sensitive operations
Rotate keys regularly from the dashboard
Last updated
Was this helpful?