Update connection
Update a connection's display name, sync frequency, stream selection, or status. Changes to name, schedule, and streams are propagated to Airbyte. Requires an agency key (ak_).
curl -X PUT "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/connections/example_string" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"display_name": "Acme — Google Ads (Prod)",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"streams": [
{
"name": "campaigns",
"syncMode": "incremental_deduped_history",
"cursorField": "segments.date",
"sourceDefinedCursor": true,
"primaryKey": [
[
"example_string"
]
]
}
],
"status": "active"
}'
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/connections/example_string"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"display_name": "Acme — Google Ads (Prod)",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"streams": [
{
"name": "campaigns",
"syncMode": "incremental_deduped_history",
"cursorField": "segments.date",
"sourceDefinedCursor": true,
"primaryKey": [
[
"example_string"
]
]
}
],
"status": "active"
}
response = requests.put(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/connections/example_string", {
method: "PUT",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"display_name": "Acme — Google Ads (Prod)",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"streams": [
{
"name": "campaigns",
"syncMode": "incremental_deduped_history",
"cursorField": "segments.date",
"sourceDefinedCursor": true,
"primaryKey": [
[
"example_string"
]
]
}
],
"status": "active"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"display_name": "Acme — Google Ads (Prod)",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"streams": [
{
"name": "campaigns",
"syncMode": "incremental_deduped_history",
"cursorField": "segments.date",
"sourceDefinedCursor": true,
"primaryKey": [
[
"example_string"
]
]
}
],
"status": "active"
}`)
req, err := http.NewRequest("PUT", "https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/connections/example_string", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/airbyte/connections/example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Put.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"display_name": "Acme — Google Ads (Prod)",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"streams": [
{
"name": "campaigns",
"syncMode": "incremental_deduped_history",
"cursorField": "segments.date",
"sourceDefinedCursor": true,
"primaryKey": [
[
"example_string"
]
]
}
],
"status": "active"
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"id": "example_string",
"client_id": "acme-retail",
"agency_id": "example_string",
"platform": "google_ads",
"connection_id": "example_string",
"source_id": "example_string",
"display_name": "Google Ads - acme-retail",
"account_id": "123-456-7890",
"status": "active",
"sync_frequency": "manual",
"sync_hour_utc": 8,
"sync_dow": 1,
"tables_json": [
{}
],
"companions": [
{}
],
"pipeline": {
"enrolled": true,
"reason": "example_string",
"pipeline_id": "example_string",
"connection_ids": [
"example_string"
],
"pipeline_enabled": true
},
"last_sync_at": "2024-12-25T10:00:00Z",
"last_sync": {
"job_id": 123,
"success": true,
"landed": true,
"finished_at": "2024-12-25T10:00:00Z",
"started_at": "2024-12-25T10:00:00Z",
"duration_seconds": 42,
"records_committed": 42,
"records_emitted": 42,
"records_filtered_out": 42,
"bytes_committed": 42,
"error_type": "transient_error",
"error_origin": "destination",
"error_message": "example_string",
"log_url": "example_string"
},
"consecutive_failures": 0,
"error_message": "example_string",
"created_at": "2024-12-25T10:00:00Z"
}
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
/connections/{id}Target server for requests. Edit to use your own host.
Agency key as bearer token, format Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Location secret key as bearer token, format Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.
Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.
Mythic connection record identifier (the local UUID, not the Airbyte connection ID).
The media type of the request body
Sync cadence. 24h, 12h and 6h schedule automatic syncs at sync_hour_utc; manual disables them, and is the DEFAULT — a connection created without this field does not sync on a schedule.
Hour of day, UTC, the cadence is anchored to. Defaults to 2 when unset. Sub-daily cadences anchor on hour % interval, so the hour you ask for is always one of the run times and the runs stay evenly spaced — 6h at 8 runs at 02:00, 08:00, 14:00 and 20:00. Ignored when sync_frequency is manual.
UTC day of week (0 = Sunday) a PIPELINE RUN may include this connection. null, the default, means every run.
This is how a connection syncs less often than the run that owns it — Meta's weekly creatives companion is created with 0 (Sunday). A run on any other day marks the step skipped with reason weekly — only runs on Sunday (UTC), which never holds the run's gate.
Read by the pipeline only. A connection on its own Airbyte cron ignores it, because the cron already says when it runs. Writable on PUT /connections/{id}.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Agency key as bearer token, format Bearer ak_.... Grants full read-write access scoped to the agency. Agency-wide scoped keys (mcp_ with no fixed location) are accepted too and need airbyte:read or airbyte:write; a client-bound mcp_ key gets 403 agency_key_required. See Using an mcp_ key over HTTP.
Bearer token. Location secret key as bearer token, format Bearer sk_.... Grants read-only access; the agency is resolved from the location. Write endpoints return 403.
Path Parameters
Mythic connection record identifier (the local UUID, not the Airbyte connection ID).
Body
Acme — Google Ads (Prod)Sync cadence. 24h, 12h and 6h schedule automatic syncs at sync_hour_utc; manual disables them, and is the DEFAULT — a connection created without this field does not sync on a schedule.
manual24h12h6hHour of day, UTC, the cadence is anchored to. Defaults to 2 when unset. Sub-daily cadences anchor on hour % interval, so the hour you ask for is always one of the run times and the runs stay evenly spaced — 6h at 8 runs at 02:00, 08:00, 14:00 and 20:00. Ignored when sync_frequency is manual.
8UTC day of week (0 = Sunday) a PIPELINE RUN may include this connection. null, the default, means every run.
This is how a connection syncs less often than the run that owns it — Meta's weekly creatives companion is created with 0 (Sunday). A run on any other day marks the step skipped with reason weekly — only runs on Sunday (UTC), which never holds the run's gate.
Read by the pipeline only. A connection on its own Airbyte cron ignores it, because the cron already says when it runs. Writable on PUT /connections/\\{id\\}.
1activeerrorpaused