@adcp/sdk 6.9.0 → 6.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
id: sales_social
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Social platform"
|
|
4
|
+
protocol: media-buy
|
|
5
|
+
category: sales_social
|
|
6
|
+
summary: "Social media platform that accepts audience segments, native creatives, and conversion events from buyer agents."
|
|
7
|
+
track: audiences
|
|
8
|
+
required_tools:
|
|
9
|
+
- sync_audiences
|
|
10
|
+
- sync_catalogs
|
|
11
|
+
- sync_creatives
|
|
12
|
+
- sync_event_sources
|
|
13
|
+
|
|
14
|
+
# Cross-step assertion (adcp#2664). status.monotonic rejects resource
|
|
15
|
+
# status transitions observed across steps that aren't on the spec
|
|
16
|
+
# lifecycle graph — e.g. approved → processing on a creative asset or
|
|
17
|
+
# active → pending_creatives on a media_buy.
|
|
18
|
+
invariants:
|
|
19
|
+
- status.monotonic
|
|
20
|
+
|
|
21
|
+
narrative: |
|
|
22
|
+
You run a social media platform — Snap, Meta, TikTok, Pinterest, or any walled garden that
|
|
23
|
+
sells advertising through audience-based targeting and native creative formats. A buyer agent
|
|
24
|
+
connects to set up an account, push audience segments, sync native creatives, track conversion
|
|
25
|
+
events, and monitor spend.
|
|
26
|
+
|
|
27
|
+
Unlike open-web media buys, social platforms require the buyer to push assets into the
|
|
28
|
+
platform's environment. Audiences are activated via sync_audiences, creatives are pushed via
|
|
29
|
+
sync_creatives in platform-native formats, and conversion events flow back via log_event.
|
|
30
|
+
|
|
31
|
+
This storyboard covers the social platform integration from the buyer's perspective:
|
|
32
|
+
account setup, audience activation, native creative push, event tracking, and financial
|
|
33
|
+
monitoring.
|
|
34
|
+
|
|
35
|
+
agent:
|
|
36
|
+
interaction_model: media_buy_seller
|
|
37
|
+
capabilities:
|
|
38
|
+
- sells_media
|
|
39
|
+
- accepts_briefs
|
|
40
|
+
- supports_non_guaranteed
|
|
41
|
+
examples:
|
|
42
|
+
- "Snap"
|
|
43
|
+
- "Meta"
|
|
44
|
+
- "TikTok"
|
|
45
|
+
- "Pinterest"
|
|
46
|
+
|
|
47
|
+
caller:
|
|
48
|
+
role: buyer_agent
|
|
49
|
+
example: "Scope3 (DSP)"
|
|
50
|
+
|
|
51
|
+
prerequisites:
|
|
52
|
+
description: |
|
|
53
|
+
The caller needs a brand identity, operator credentials, audience segment definitions,
|
|
54
|
+
and native creative assets. The test kit provides a sample brand with creative assets
|
|
55
|
+
suitable for social formats.
|
|
56
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
57
|
+
|
|
58
|
+
phases:
|
|
59
|
+
- id: capability_discovery
|
|
60
|
+
title: "Capability discovery"
|
|
61
|
+
narrative: |
|
|
62
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports media buying before syncing audiences and native creatives.
|
|
63
|
+
|
|
64
|
+
steps:
|
|
65
|
+
- id: get_capabilities
|
|
66
|
+
title: "Check agent capabilities"
|
|
67
|
+
narrative: |
|
|
68
|
+
Verify that the agent declares the expected protocol support before
|
|
69
|
+
proceeding with domain-specific operations.
|
|
70
|
+
task: get_adcp_capabilities
|
|
71
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
72
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
73
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
74
|
+
comply_scenario: capability_discovery
|
|
75
|
+
stateful: false
|
|
76
|
+
expected: |
|
|
77
|
+
Return capabilities declaring media_buy in supported_protocols, confirming the agent sells media.
|
|
78
|
+
sample_request:
|
|
79
|
+
context:
|
|
80
|
+
correlation_id: "sales_social--get_capabilities"
|
|
81
|
+
validations:
|
|
82
|
+
- check: response_schema
|
|
83
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
84
|
+
- check: field_present
|
|
85
|
+
path: "supported_protocols"
|
|
86
|
+
description: "Agent declares supported protocols"
|
|
87
|
+
|
|
88
|
+
- check: field_present
|
|
89
|
+
path: "context"
|
|
90
|
+
description: "Response echoes back the context object"
|
|
91
|
+
- check: field_value
|
|
92
|
+
path: "context.correlation_id"
|
|
93
|
+
value: "sales_social--get_capabilities"
|
|
94
|
+
description: "Context correlation_id returned unchanged"
|
|
95
|
+
- id: account_setup
|
|
96
|
+
title: "Account setup"
|
|
97
|
+
narrative: |
|
|
98
|
+
The buyer establishes an account with the social platform and verifies its status.
|
|
99
|
+
Social platforms often require advertiser verification before accepting ad spend.
|
|
100
|
+
|
|
101
|
+
steps:
|
|
102
|
+
- id: sync_accounts
|
|
103
|
+
title: "Register advertiser account"
|
|
104
|
+
narrative: |
|
|
105
|
+
The buyer registers their brand and operator with the social platform. The platform
|
|
106
|
+
provisions an advertiser account and returns its status. Social platforms may require
|
|
107
|
+
identity verification before the account goes active.
|
|
108
|
+
task: sync_accounts
|
|
109
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
110
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
111
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
112
|
+
stateful: true
|
|
113
|
+
expected: |
|
|
114
|
+
Return the advertiser account with:
|
|
115
|
+
- account_id: platform's identifier
|
|
116
|
+
- status: active or pending_approval (if verification required)
|
|
117
|
+
- account_scope: how the platform scopes this relationship
|
|
118
|
+
|
|
119
|
+
sample_request:
|
|
120
|
+
accounts:
|
|
121
|
+
- brand:
|
|
122
|
+
domain: "acmeoutdoor.example"
|
|
123
|
+
operator: "pinnacle-agency.example"
|
|
124
|
+
billing: "operator"
|
|
125
|
+
|
|
126
|
+
idempotency_key: "$generate:uuid_v4#sales_social_account_setup_sync_accounts"
|
|
127
|
+
context:
|
|
128
|
+
correlation_id: "sales_social--sync_accounts"
|
|
129
|
+
validations:
|
|
130
|
+
- check: response_schema
|
|
131
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
132
|
+
- check: field_present
|
|
133
|
+
path: "accounts[0].account_id"
|
|
134
|
+
description: "Account has a platform-assigned ID"
|
|
135
|
+
|
|
136
|
+
- check: field_present
|
|
137
|
+
path: "context"
|
|
138
|
+
description: "Response echoes back the context object"
|
|
139
|
+
- check: field_value
|
|
140
|
+
path: "context.correlation_id"
|
|
141
|
+
value: "sales_social--sync_accounts"
|
|
142
|
+
description: "Context correlation_id returned unchanged"
|
|
143
|
+
- id: list_accounts
|
|
144
|
+
title: "Verify account status"
|
|
145
|
+
narrative: |
|
|
146
|
+
The buyer checks which accounts exist on the platform and their current status.
|
|
147
|
+
This confirms the account is active and shows any pending setup requirements.
|
|
148
|
+
task: list_accounts
|
|
149
|
+
schema_ref: "account/list-accounts-request.json"
|
|
150
|
+
response_schema_ref: "account/list-accounts-response.json"
|
|
151
|
+
doc_ref: "/accounts/tasks/list_accounts"
|
|
152
|
+
stateful: true
|
|
153
|
+
# Explicit-mode social platforms (Snap, Meta, TikTok) pre-provision
|
|
154
|
+
# advertiser accounts out-of-band — `sync_accounts` is intentionally
|
|
155
|
+
# missing_tool, with `list_accounts` as the canonical alternative.
|
|
156
|
+
# Declaring the substitution here lets the runner waive the
|
|
157
|
+
# downstream missing_tool cascade when list_accounts passes.
|
|
158
|
+
# See adcontextprotocol/adcp#3734.
|
|
159
|
+
provides_state_for: sync_accounts
|
|
160
|
+
expected: |
|
|
161
|
+
Return accounts matching the query:
|
|
162
|
+
- accounts array with status, account_id, brand, operator
|
|
163
|
+
- Active accounts ready for ad operations
|
|
164
|
+
- Pending accounts with accounts[].setup.url populated if verification is needed
|
|
165
|
+
|
|
166
|
+
sample_request:
|
|
167
|
+
context:
|
|
168
|
+
correlation_id: "sales_social--list_accounts"
|
|
169
|
+
validations:
|
|
170
|
+
- check: response_schema
|
|
171
|
+
description: "Response matches list-accounts-response.json schema"
|
|
172
|
+
- check: field_present
|
|
173
|
+
path: "accounts"
|
|
174
|
+
description: "Response contains accounts array"
|
|
175
|
+
|
|
176
|
+
- check: field_present
|
|
177
|
+
path: "context"
|
|
178
|
+
description: "Response echoes back the context object"
|
|
179
|
+
- check: field_value
|
|
180
|
+
path: "context.correlation_id"
|
|
181
|
+
value: "sales_social--list_accounts"
|
|
182
|
+
description: "Context correlation_id returned unchanged"
|
|
183
|
+
- id: audience_sync
|
|
184
|
+
title: "Audience activation"
|
|
185
|
+
narrative: |
|
|
186
|
+
The buyer pushes audience segments to the platform. Social platforms use these segments
|
|
187
|
+
for targeting — the buyer defines who to reach, and the platform matches against its
|
|
188
|
+
user base.
|
|
189
|
+
|
|
190
|
+
steps:
|
|
191
|
+
- id: sync_audiences
|
|
192
|
+
title: "Push audience segments"
|
|
193
|
+
narrative: |
|
|
194
|
+
The buyer syncs audience segment definitions to the platform. Each segment includes
|
|
195
|
+
targeting criteria that the platform evaluates against its user graph. The platform
|
|
196
|
+
returns match rates and segment status.
|
|
197
|
+
task: sync_audiences
|
|
198
|
+
schema_ref: "media-buy/sync-audiences-request.json"
|
|
199
|
+
response_schema_ref: "media-buy/sync-audiences-response.json"
|
|
200
|
+
doc_ref: "/media-buy/task-reference/sync_audiences"
|
|
201
|
+
comply_scenario: sync_audiences
|
|
202
|
+
stateful: true
|
|
203
|
+
expected: |
|
|
204
|
+
Accept and process audience segments:
|
|
205
|
+
- Per-segment status: active, processing, or rejected
|
|
206
|
+
- Match rate estimates where available
|
|
207
|
+
- Platform-assigned segment IDs
|
|
208
|
+
|
|
209
|
+
sample_request:
|
|
210
|
+
account:
|
|
211
|
+
brand:
|
|
212
|
+
domain: "acmeoutdoor.example"
|
|
213
|
+
operator: "pinnacle-agency.example"
|
|
214
|
+
audiences:
|
|
215
|
+
- audience_id: "outdoor_enthusiasts_25_54"
|
|
216
|
+
name: "Outdoor enthusiasts 25-54"
|
|
217
|
+
description: "Adults 25-54 interested in hiking, camping, and outdoor gear"
|
|
218
|
+
|
|
219
|
+
idempotency_key: "$generate:uuid_v4#sales_social_audience_sync_sync_audiences"
|
|
220
|
+
context:
|
|
221
|
+
correlation_id: "sales_social--sync_audiences"
|
|
222
|
+
validations:
|
|
223
|
+
- check: response_schema
|
|
224
|
+
description: "Response matches sync-audiences-response.json schema"
|
|
225
|
+
|
|
226
|
+
- check: field_present
|
|
227
|
+
path: "context"
|
|
228
|
+
description: "Response echoes back the context object"
|
|
229
|
+
- check: field_value
|
|
230
|
+
path: "context.correlation_id"
|
|
231
|
+
value: "sales_social--sync_audiences"
|
|
232
|
+
description: "Context correlation_id returned unchanged"
|
|
233
|
+
- id: creative_push
|
|
234
|
+
title: "Native creative sync"
|
|
235
|
+
narrative: |
|
|
236
|
+
The buyer pushes native creative assets to the platform. Social platforms render ads
|
|
237
|
+
in their native format — the buyer provides assets (images, headlines, descriptions)
|
|
238
|
+
and the platform assembles them into the native ad unit.
|
|
239
|
+
|
|
240
|
+
steps:
|
|
241
|
+
- id: sync_creatives
|
|
242
|
+
title: "Push native creative assets"
|
|
243
|
+
narrative: |
|
|
244
|
+
The buyer syncs creative assets for native ad formats. The platform validates
|
|
245
|
+
each creative against its format requirements and returns per-creative status.
|
|
246
|
+
task: sync_creatives
|
|
247
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
248
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
249
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
250
|
+
comply_scenario: creative_sync
|
|
251
|
+
stateful: true
|
|
252
|
+
expected: |
|
|
253
|
+
Accept and validate native creatives:
|
|
254
|
+
- Per-creative action: created or updated
|
|
255
|
+
- Per-creative status: accepted, pending_review, or rejected
|
|
256
|
+
- Validation errors for rejected creatives
|
|
257
|
+
|
|
258
|
+
sample_request:
|
|
259
|
+
account:
|
|
260
|
+
brand:
|
|
261
|
+
domain: "acmeoutdoor.example"
|
|
262
|
+
operator: "pinnacle-agency.example"
|
|
263
|
+
creatives:
|
|
264
|
+
- creative_id: "native_trail_pro"
|
|
265
|
+
name: "Trail Pro 3000 - Native"
|
|
266
|
+
format_id:
|
|
267
|
+
agent_url: "https://social-platform.example.com"
|
|
268
|
+
id: "native_feed"
|
|
269
|
+
assets:
|
|
270
|
+
image:
|
|
271
|
+
asset_type: "image"
|
|
272
|
+
url: "https://cdn.pinnacle-agency.example/trail-pro-native.png"
|
|
273
|
+
width: 1200
|
|
274
|
+
height: 628
|
|
275
|
+
mime_type: "image/png"
|
|
276
|
+
headline:
|
|
277
|
+
asset_type: "text"
|
|
278
|
+
content: "Trail Pro 3000 — Built for the Summit"
|
|
279
|
+
|
|
280
|
+
idempotency_key: "$generate:uuid_v4#sales_social_creative_push_sync_creatives"
|
|
281
|
+
context:
|
|
282
|
+
correlation_id: "sales_social--sync_creatives"
|
|
283
|
+
validations:
|
|
284
|
+
- check: response_schema
|
|
285
|
+
description: "Response matches sync-creatives-response.json schema"
|
|
286
|
+
|
|
287
|
+
- check: field_present
|
|
288
|
+
path: "context"
|
|
289
|
+
description: "Response echoes back the context object"
|
|
290
|
+
- check: field_value
|
|
291
|
+
path: "context.correlation_id"
|
|
292
|
+
value: "sales_social--sync_creatives"
|
|
293
|
+
description: "Context correlation_id returned unchanged"
|
|
294
|
+
- id: catalog_driven_dynamic_ads
|
|
295
|
+
title: "Catalog-driven dynamic product ads"
|
|
296
|
+
narrative: |
|
|
297
|
+
Social platforms routinely ship dynamic product ads (Snap Dynamic Ads, Meta DPA,
|
|
298
|
+
TikTok Dynamic Showcase): the buyer pushes a product catalog and the platform
|
|
299
|
+
renders per-impression creative pulling product images, titles, and tracker URLs
|
|
300
|
+
from catalog items. The creative template references catalog-item macros
|
|
301
|
+
(`{SKU}`, `{GTIN}`) whose values resolve to the specific item shown at
|
|
302
|
+
impression time.
|
|
303
|
+
|
|
304
|
+
This phase exercises the catalog-acceptance leg of that flow: push a small inline
|
|
305
|
+
product catalog (with `content_id_type: "sku"` declared so macro resolution binds
|
|
306
|
+
to the right field), then push a DPA creative template using the AdCP-native
|
|
307
|
+
`product_carousel_3_to_10` format on `creative.adcontextprotocol.org`. Real
|
|
308
|
+
social-platform formats (Meta `native_carousel`, Snap dynamic ad set, TikTok
|
|
309
|
+
dynamic showcase) are platform-specific refinements tracked as follow-ups on
|
|
310
|
+
#2640; the AdCP-native format is the interop baseline.
|
|
311
|
+
|
|
312
|
+
Runtime substitution-safety checks (that the emitted tracker URLs percent-encode
|
|
313
|
+
the macro values per `docs/creative/universal-macros#substitution-safety-catalog-item-macros`)
|
|
314
|
+
require the substitution-observer contract tracked in #2638; phases gated on
|
|
315
|
+
that contract activate when runners advertise it.
|
|
316
|
+
|
|
317
|
+
steps:
|
|
318
|
+
- id: sync_product_catalog
|
|
319
|
+
title: "Push a product catalog"
|
|
320
|
+
narrative: |
|
|
321
|
+
The buyer pushes a small inline product catalog — the shape social platforms
|
|
322
|
+
accept for dynamic product ads. Your platform validates each item and
|
|
323
|
+
returns per-item approval status.
|
|
324
|
+
task: sync_catalogs
|
|
325
|
+
schema_ref: "media-buy/sync-catalogs-request.json"
|
|
326
|
+
response_schema_ref: "media-buy/sync-catalogs-response.json"
|
|
327
|
+
doc_ref: "/media-buy/task-reference/sync_catalogs"
|
|
328
|
+
stateful: true
|
|
329
|
+
expected: |
|
|
330
|
+
Return per-catalog results with catalog_id, action, item_count, and
|
|
331
|
+
items_approved counts.
|
|
332
|
+
|
|
333
|
+
sample_request:
|
|
334
|
+
account:
|
|
335
|
+
brand:
|
|
336
|
+
domain: "acmeoutdoor.example"
|
|
337
|
+
operator: "pinnacle-agency.example"
|
|
338
|
+
catalogs:
|
|
339
|
+
- catalog_id: "acme_gear_spring_2026"
|
|
340
|
+
type: "product"
|
|
341
|
+
content_id_type: "sku"
|
|
342
|
+
name: "Acme Outdoor — Spring 2026 Gear"
|
|
343
|
+
items:
|
|
344
|
+
- item_id: "trail_pro_3000"
|
|
345
|
+
title: "Trail Pro 3000 Backpack"
|
|
346
|
+
description: "65L expedition pack with torso-length adjustment."
|
|
347
|
+
url: "https://acmeoutdoor.example/gear/trail-pro-3000"
|
|
348
|
+
image_url: "https://cdn.acmeoutdoor.example/gear/trail-pro-3000.jpg"
|
|
349
|
+
price:
|
|
350
|
+
amount: 289.00
|
|
351
|
+
currency: "USD"
|
|
352
|
+
- item_id: "summit_tent_2p"
|
|
353
|
+
title: "Summit 2P Ultralight Tent"
|
|
354
|
+
description: "2-person four-season tent, 1.8kg packed."
|
|
355
|
+
url: "https://acmeoutdoor.example/gear/summit-tent-2p"
|
|
356
|
+
image_url: "https://cdn.acmeoutdoor.example/gear/summit-tent-2p.jpg"
|
|
357
|
+
price:
|
|
358
|
+
amount: 549.00
|
|
359
|
+
currency: "USD"
|
|
360
|
+
|
|
361
|
+
idempotency_key: "$generate:uuid_v4#sales_social_catalog_driven_dynamic_ads_sync_product_catalog"
|
|
362
|
+
context:
|
|
363
|
+
correlation_id: "sales_social--sync_product_catalog"
|
|
364
|
+
validations:
|
|
365
|
+
- check: response_schema
|
|
366
|
+
description: "Response matches sync-catalogs-response.json schema"
|
|
367
|
+
- check: field_present
|
|
368
|
+
path: "catalogs[0].catalog_id"
|
|
369
|
+
description: "Catalog has an ID"
|
|
370
|
+
- check: field_present
|
|
371
|
+
path: "catalogs[0].item_count"
|
|
372
|
+
description: "Catalog reports item count"
|
|
373
|
+
- check: field_present
|
|
374
|
+
path: "context"
|
|
375
|
+
description: "Response echoes back the context object"
|
|
376
|
+
- check: field_value
|
|
377
|
+
path: "context.correlation_id"
|
|
378
|
+
value: "sales_social--sync_product_catalog"
|
|
379
|
+
description: "Context correlation_id returned unchanged"
|
|
380
|
+
|
|
381
|
+
- id: sync_dpa_creative
|
|
382
|
+
title: "Push a dynamic product ad creative with catalog-item macros"
|
|
383
|
+
narrative: |
|
|
384
|
+
The buyer pushes a creative template whose tracker URLs reference
|
|
385
|
+
catalog-item macros (`{SKU}`, `{GTIN}`). At impression time, your platform
|
|
386
|
+
substitutes each catalog item's values into the template to render the
|
|
387
|
+
per-impression ad.
|
|
388
|
+
|
|
389
|
+
The template uses the AdCP-native `product_carousel_3_to_10` format
|
|
390
|
+
(see `docs/creative/channels/carousels.mdx`). Per #2620, values substituted
|
|
391
|
+
into URL contexts MUST be percent-encoded such that only RFC 3986 unreserved
|
|
392
|
+
characters remain unescaped; nested macro expansion is prohibited. This step
|
|
393
|
+
validates that the template is accepted into the library; runtime
|
|
394
|
+
substitution validation is tracked under #2638.
|
|
395
|
+
task: sync_creatives
|
|
396
|
+
schema_ref: "creative/sync-creatives-request.json"
|
|
397
|
+
response_schema_ref: "creative/sync-creatives-response.json"
|
|
398
|
+
doc_ref: "/creative/task-reference/sync_creatives"
|
|
399
|
+
comply_scenario: creative_sync
|
|
400
|
+
stateful: true
|
|
401
|
+
expected: |
|
|
402
|
+
Accept the DPA creative template. Per-creative action: created or updated.
|
|
403
|
+
|
|
404
|
+
sample_request:
|
|
405
|
+
account:
|
|
406
|
+
brand:
|
|
407
|
+
domain: "acmeoutdoor.example"
|
|
408
|
+
operator: "pinnacle-agency.example"
|
|
409
|
+
creatives:
|
|
410
|
+
- creative_id: "acme_dpa_spring_2026"
|
|
411
|
+
name: "Acme Outdoor — Spring DPA template"
|
|
412
|
+
format_id:
|
|
413
|
+
agent_url: "https://creative.adcontextprotocol.org"
|
|
414
|
+
id: "product_carousel_3_to_10"
|
|
415
|
+
assets:
|
|
416
|
+
impression_pixel:
|
|
417
|
+
asset_type: "url"
|
|
418
|
+
url: "https://track.acmeoutdoor.example/imp?sku={SKU}>in={GTIN}&mb={MEDIA_BUY_ID}"
|
|
419
|
+
click_url:
|
|
420
|
+
asset_type: "url"
|
|
421
|
+
url: "https://track.acmeoutdoor.example/click?sku={SKU}"
|
|
422
|
+
|
|
423
|
+
idempotency_key: "$generate:uuid_v4#sales_social_catalog_driven_dynamic_ads_sync_dpa_creative"
|
|
424
|
+
context:
|
|
425
|
+
correlation_id: "sales_social--sync_dpa_creative"
|
|
426
|
+
validations:
|
|
427
|
+
- check: response_schema
|
|
428
|
+
description: "Response matches sync-creatives-response.json schema"
|
|
429
|
+
- check: field_present
|
|
430
|
+
path: "context"
|
|
431
|
+
description: "Response echoes back the context object"
|
|
432
|
+
- check: field_value
|
|
433
|
+
path: "context.correlation_id"
|
|
434
|
+
value: "sales_social--sync_dpa_creative"
|
|
435
|
+
description: "Context correlation_id returned unchanged"
|
|
436
|
+
- id: event_setup
|
|
437
|
+
title: "Event source setup"
|
|
438
|
+
narrative: |
|
|
439
|
+
Before sending conversion events, the buyer registers the event sources the platform
|
|
440
|
+
should expect events from — a website pixel, a mobile SDK, or a server-to-server feed.
|
|
441
|
+
The platform returns setup instructions and binds the event_source_id that later
|
|
442
|
+
log_event calls will reference.
|
|
443
|
+
|
|
444
|
+
steps:
|
|
445
|
+
- id: sync_event_sources
|
|
446
|
+
title: "Register conversion event sources"
|
|
447
|
+
narrative: |
|
|
448
|
+
The buyer tells the platform where conversion events will come from. The
|
|
449
|
+
platform records each event_source_id, returns integration code, and will
|
|
450
|
+
accept log_event calls that reference it.
|
|
451
|
+
task: sync_event_sources
|
|
452
|
+
schema_ref: "media-buy/sync-event-sources-request.json"
|
|
453
|
+
response_schema_ref: "media-buy/sync-event-sources-response.json"
|
|
454
|
+
doc_ref: "/media-buy/task-reference/sync_event_sources"
|
|
455
|
+
stateful: true
|
|
456
|
+
expected: |
|
|
457
|
+
Return event sources with:
|
|
458
|
+
- event_source_id and seller_id
|
|
459
|
+
- setup.snippet: integration code (JavaScript pixel, HTML tag, or pixel URL)
|
|
460
|
+
- setup.instructions: human-readable integration guide
|
|
461
|
+
- action: created or updated
|
|
462
|
+
|
|
463
|
+
sample_request:
|
|
464
|
+
account:
|
|
465
|
+
brand:
|
|
466
|
+
domain: "acmeoutdoor.example"
|
|
467
|
+
operator: "pinnacle-agency.example"
|
|
468
|
+
event_sources:
|
|
469
|
+
- event_source_id: "acmeoutdoor_website"
|
|
470
|
+
name: "Acme Outdoor Website"
|
|
471
|
+
event_types: ["purchase", "add_to_cart", "page_view", "lead"]
|
|
472
|
+
allowed_domains: ["acmeoutdoor.example"]
|
|
473
|
+
|
|
474
|
+
idempotency_key: "$generate:uuid_v4#sales_social_event_setup_sync_event_sources"
|
|
475
|
+
context:
|
|
476
|
+
correlation_id: "sales_social--sync_event_sources"
|
|
477
|
+
validations:
|
|
478
|
+
- check: response_schema
|
|
479
|
+
description: "Response matches sync-event-sources-response.json schema"
|
|
480
|
+
- check: field_present
|
|
481
|
+
path: "event_sources[0].setup.snippet"
|
|
482
|
+
description: "Event source includes setup snippet"
|
|
483
|
+
|
|
484
|
+
- check: field_present
|
|
485
|
+
path: "context"
|
|
486
|
+
description: "Response echoes back the context object"
|
|
487
|
+
- check: field_value
|
|
488
|
+
path: "context.correlation_id"
|
|
489
|
+
value: "sales_social--sync_event_sources"
|
|
490
|
+
description: "Context correlation_id returned unchanged"
|
|
491
|
+
- id: event_logging
|
|
492
|
+
title: "Conversion event tracking"
|
|
493
|
+
narrative: |
|
|
494
|
+
The buyer sends conversion events back to the platform for measurement and optimization.
|
|
495
|
+
Events include purchases, signups, and other post-click actions that the platform uses
|
|
496
|
+
to optimize delivery and report on campaign performance.
|
|
497
|
+
|
|
498
|
+
steps:
|
|
499
|
+
- id: log_event
|
|
500
|
+
title: "Send conversion events"
|
|
501
|
+
narrative: |
|
|
502
|
+
The buyer logs conversion events that occurred after ad exposure. The platform
|
|
503
|
+
records these events for attribution, reporting, and delivery optimization.
|
|
504
|
+
task: log_event
|
|
505
|
+
schema_ref: "media-buy/log-event-request.json"
|
|
506
|
+
response_schema_ref: "media-buy/log-event-response.json"
|
|
507
|
+
doc_ref: "/media-buy/task-reference/log_event"
|
|
508
|
+
stateful: true
|
|
509
|
+
expected: |
|
|
510
|
+
Acknowledge the events:
|
|
511
|
+
- Per-event status: accepted or rejected
|
|
512
|
+
- Event IDs for deduplication
|
|
513
|
+
- Attribution window validation
|
|
514
|
+
|
|
515
|
+
sample_request:
|
|
516
|
+
account:
|
|
517
|
+
brand:
|
|
518
|
+
domain: "acmeoutdoor.example"
|
|
519
|
+
operator: "pinnacle-agency.example"
|
|
520
|
+
event_source_id: "acmeoutdoor_website"
|
|
521
|
+
events:
|
|
522
|
+
- event_type: "purchase"
|
|
523
|
+
event_id: "evt_trail_pro_001"
|
|
524
|
+
event_time: "2026-04-05T14:30:00Z"
|
|
525
|
+
value: 149.99
|
|
526
|
+
currency: "USD"
|
|
527
|
+
|
|
528
|
+
idempotency_key: "$generate:uuid_v4#sales_social_event_logging_log_event"
|
|
529
|
+
context:
|
|
530
|
+
correlation_id: "sales_social--log_event"
|
|
531
|
+
validations:
|
|
532
|
+
- check: response_schema
|
|
533
|
+
description: "Response matches log-event-response.json schema"
|
|
534
|
+
|
|
535
|
+
- check: field_present
|
|
536
|
+
path: "context"
|
|
537
|
+
description: "Response echoes back the context object"
|
|
538
|
+
- check: field_value
|
|
539
|
+
path: "context.correlation_id"
|
|
540
|
+
value: "sales_social--log_event"
|
|
541
|
+
description: "Context correlation_id returned unchanged"
|
|
542
|
+
- id: financials
|
|
543
|
+
title: "Account financials"
|
|
544
|
+
narrative: |
|
|
545
|
+
The buyer checks account financials — spending, balance, and payment status. This is
|
|
546
|
+
essential for budget monitoring across multiple social platforms.
|
|
547
|
+
|
|
548
|
+
steps:
|
|
549
|
+
- id: get_account_financials
|
|
550
|
+
title: "Check account spending and balance"
|
|
551
|
+
narrative: |
|
|
552
|
+
The buyer retrieves financial information for the advertiser account. The platform
|
|
553
|
+
returns current spend, remaining balance, and payment status.
|
|
554
|
+
task: get_account_financials
|
|
555
|
+
schema_ref: "account/get-account-financials-request.json"
|
|
556
|
+
response_schema_ref: "account/get-account-financials-response.json"
|
|
557
|
+
doc_ref: "/accounts/tasks/get_account_financials"
|
|
558
|
+
stateful: true
|
|
559
|
+
expected: |
|
|
560
|
+
Return account financial data:
|
|
561
|
+
- Current spend to date
|
|
562
|
+
- Remaining balance or credit
|
|
563
|
+
- Payment status and terms
|
|
564
|
+
- Budget utilization metrics
|
|
565
|
+
|
|
566
|
+
sample_request:
|
|
567
|
+
account:
|
|
568
|
+
brand:
|
|
569
|
+
domain: "acmeoutdoor.example"
|
|
570
|
+
operator: "pinnacle-agency.example"
|
|
571
|
+
|
|
572
|
+
context:
|
|
573
|
+
correlation_id: "sales_social--get_account_financials"
|
|
574
|
+
validations:
|
|
575
|
+
- check: response_schema
|
|
576
|
+
description: "Response matches get-account-financials-response.json schema"
|
|
577
|
+
|
|
578
|
+
- check: field_present
|
|
579
|
+
path: "context"
|
|
580
|
+
description: "Response echoes back the context object"
|
|
581
|
+
- check: field_value
|
|
582
|
+
path: "context.correlation_id"
|
|
583
|
+
value: "sales_social--get_account_financials"
|
|
584
|
+
description: "Context correlation_id returned unchanged"
|