Custom
Euno's Custom integration provides the simplest way to ingest data resources directly into your data model. This integration accepts raw observation objects, making it perfect for custom data sources, manual uploads, or integrating systems that don't have dedicated Euno integrations.
How It Works
The integration follows these steps:
- Provides a secure endpoint Euno generates a unique integration key and endpoint URL for receiving custom observations 
- Accepts Observation Objects The integration accepts both single observations and arrays of observations via HTTP POST 
- Validates and Processes - Validates observation structure using Pydantic models 
- Stores observations directly in your data model 
- Tracks processing statistics and validation errors 
 
Setting up Euno's Custom Integration
Step 1: Configure New Custom Source in Euno
Access the Sources Page
- Navigate to the Sources page in the Euno application 
- Click on the Add New Source button 
- Select Custom from the available integrations 
Step 2: General Configuration
- Name: Enter a descriptive name for your Custom source (e.g., "Manual Data Upload") 
- Configuration Details: - Custom integration requires no configuration as it's a push-based integration 
- No schedule configuration is needed since observations are pushed as needed 
 
Step 3: Resource Cleanup Options
Configure automatic resource cleanup options to manage outdated resources:
- Time-Based Cleanup (default): Remove resources not detected for X days (default: 7 days) 
- Immediate Cleanup: Remove resources not detected in the most recent run 
- No Cleanup: Keep all resources indefinitely 
Step 4: Save Configuration
Click the Save button, and Euno will generate an integration key. Copy and save this key securely as it will not be displayed again.
Step 5: Get the Upload Endpoint
- Click "Reset Trigger Key" to get the endpoint URL 
- Copy the provided endpoint URL where you'll send custom observations 
- Use the integration key from Step 4 as the Bearer token in your Authorization header 
Sending Custom Observations
Example: Table with Tags and Metadata
Here's a complete example of a custom observation for a table with tags:
{
  "uri": "custom.analytics.customer_summary",
  "properties": {
    "type": "table",
    "name": "customer_summary",
    "description": "Aggregated customer metrics and analytics",
    "database_technology": "snowflake",
    "tags": ["customer_data", "analytics", "production"],
    "meta": {
      "owner": "data-team",
      "environment": "production",
      "classification": "internal"
    }
  }
}cURL Command Examples
Single Observation Upload
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_INTEGRATION_KEY_HERE" \
  -d '{
    "uri": "custom.sales.monthly_revenue",
    "properties": {
      "type": "table",
      "name": "monthly_revenue",
      "description": "Monthly revenue aggregations by product line",
      "database_technology": "snowflake",
      "tags": ["revenue", "monthly", "sales"],
      "meta": {
        "department": "sales",
        "update_frequency": "monthly"
      }
    }
  }' \
  https://api.app.euno.ai/accounts/YOUR_ACCOUNT_ID/integrations/YOUR_INTEGRATION_ID/runMultiple Observations Upload
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_INTEGRATION_KEY_HERE" \
  -d '[
    {
      "uri": "custom.marketing.campaigns",
      "properties": {
        "type": "table",
        "name": "campaigns",
        "tags": ["marketing", "campaigns"]
      }
    },
    {
      "uri": "custom.marketing.campaign_analytics",
      "properties": {
        "type": "view",
        "name": "campaign_analytics", 
        "description": "Derived analytics from campaign performance",
        "tags": ["marketing", "analytics", "derived"]
      }
    }
  ]' \
  https://api.app.euno.ai/accounts/YOUR_ACCOUNT_ID/integrations/YOUR_INTEGRATION_ID/runGenerating a new trigger key: If you need to create a new integration key, go to the Sources page and click on the three-dot menu next to your Custom source. Select "Reset Trigger Key" to generate a new key and endpoint URL.
Last updated
