@bijection/connectors/pinterest-ads entrypoint to declare Pinterest Ads resources.
Availability
This page describes the pinned source package. Published availability is unestablished for this artifact. Source build and package availability.Resources and modes
| Resource | Mode | Description |
|---|---|---|
| Ad analytics | daily | Daily account or campaign analytics within Pinterest’s 90-day reach |
| Ad analytics | async | Daily account or campaign history through asynchronous reports |
Ad analytics
daily: Daily account or campaign analytics within Pinterest’s 90-day reach
The following example matches configurationaccount.
import { pinterestAds } from "@bijection/connectors/pinterest-ads";
export const accountDays = pinterestAds.analytics.daily({
start: "2026-08-01",
columns: ["SPEND_IN_MICRO_DOLLAR", "TOTAL_IMPRESSION", "TOTAL_CLICKTHROUGH"],
});
Inferred record types
Inferred record types
Resource without an operational record table
Configuration: account
Case:pinterest-ads/analytics/daily/account.
Connection and resource configuration are declared by this exact case.
Credential kind: pinterest-ads. Keep credential material in the private credential inventory.
| Setting | Type | Required | Owner |
|---|---|---|---|
adAccountId | string | Yes | Resource binding |
Complete configuration contract
Complete configuration contract
{
"setup": [],
"resource": {
"access": {},
"defaults": {},
"connector": "pinterest-ads",
"output": {
"kind": "single",
"collection": "analytics"
},
"credential_kind": "pinterest-ads",
"connection_fields": [],
"address": {
"kind": "fixed",
"url": "https://api.pinterest.com"
}
},
"connection_setup": {
"type": "object",
"value": {
"adAccountId": {
"fieldType": {
"type": "string"
},
"optional": false
}
}
},
"execution": null
}
| Contract | Meaning |
|---|---|
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |
Complete native profile
Complete native profile
{
"movement": {
"exchanges": {
"analytics": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange analytics",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
Commands, occurrences and artifacts
Commands, occurrences and artifacts
{
"records": {
"analytics": {
"protocol": "record_observation",
"coverage": "records",
"consistency": "observations",
"atomicity": "record",
"history": "observations",
"recordRefresh": false,
"reconciliation": false,
"notifications": false,
"snapshotMaxRows": null,
"profile": {
"movement": {
"exchanges": {
"analytics": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange analytics",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
}
},
"occurrences": null,
"artifacts": {
"raw_archive": false,
"native_file_transfer_limit_bytes": null,
"external_versions": false,
"files": {}
},
"commands": {}
}
| Requirement | Scope | Evidence | Result |
|---|---|---|---|
| page-publication-recovery | {“kind”:“collection”,“name”:“analytics”} | Fixture: ./src/connectors/pinterest-ads/fixtures/account-chunk-continues.json | passed (2026-10-24T21:36:12.284Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“analytics”} | Fixture: ./src/connectors/pinterest-ads/fixtures/account-last-chunk-carries.json | passed (2026-10-24T21:36:12.286Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“analytics”} | Native test: integrations/acquisition/acquisition_windows_preserve_sequences_and_restart_fences_old_work (shared_engine) | Execution result unavailable |
| backoff-stated-wait | {“kind”:“connection”} | Native test: integrations/acquisition/backoff_a_stated_wait_defers_the_next_dispatch_and_then_resumes (shared_engine) | Execution result unavailable |
| identity-account | {“kind”:“connection”} | Fixture: ./src/connectors/pinterest-ads/fixtures/identity.json | passed (2026-10-24T21:36:12.287Z) |
Configuration: campaigns
Case:pinterest-ads/analytics/daily/campaigns.
Connection and resource configuration are declared by this exact case.
Credential kind: pinterest-ads. Keep credential material in the private credential inventory.
| Setting | Type | Required | Owner |
|---|---|---|---|
adAccountId | string | Yes | Resource binding |
Complete configuration contract
Complete configuration contract
{
"setup": [],
"resource": {
"access": {},
"defaults": {},
"connector": "pinterest-ads",
"output": {
"kind": "single",
"collection": "analytics"
},
"credential_kind": "pinterest-ads",
"connection_fields": [],
"address": {
"kind": "fixed",
"url": "https://api.pinterest.com"
}
},
"connection_setup": {
"type": "object",
"value": {
"adAccountId": {
"fieldType": {
"type": "string"
},
"optional": false
}
}
},
"execution": null
}
| Contract | Meaning |
|---|---|
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |
Complete native profile
Complete native profile
{
"movement": {
"exchanges": {
"analytics": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange analytics",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
Commands, occurrences and artifacts
Commands, occurrences and artifacts
{
"records": {
"analytics": {
"protocol": "record_observation",
"coverage": "records",
"consistency": "observations",
"atomicity": "record",
"history": "observations",
"recordRefresh": false,
"reconciliation": false,
"notifications": false,
"snapshotMaxRows": null,
"profile": {
"movement": {
"exchanges": {
"analytics": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange analytics",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
}
},
"occurrences": null,
"artifacts": {
"raw_archive": false,
"native_file_transfer_limit_bytes": null,
"external_versions": false,
"files": {}
},
"commands": {}
}
| Requirement | Scope | Evidence | Result |
|---|---|---|---|
| page-publication-recovery | {“kind”:“collection”,“name”:“analytics”} | Fixture: ./src/connectors/pinterest-ads/fixtures/campaign-rows.json | passed (2026-10-24T21:36:12.287Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“analytics”} | Native test: integrations/acquisition/acquisition_windows_preserve_sequences_and_restart_fences_old_work (shared_engine) | Execution result unavailable |
| backoff-stated-wait | {“kind”:“connection”} | Native test: integrations/acquisition/backoff_a_stated_wait_defers_the_next_dispatch_and_then_resumes (shared_engine) | Execution result unavailable |
| identity-account | {“kind”:“connection”} | Fixture: ./src/connectors/pinterest-ads/fixtures/identity.json | passed (2026-10-24T21:36:12.287Z) |
async: Daily account or campaign history through asynchronous reports
The following example matches configurationaccount.
import { pinterestAds } from "@bijection/connectors/pinterest-ads";
export const campaignHistory = pinterestAds.analytics.async({
start: "2026-01-01",
columns: ["SPEND_IN_MICRO_DOLLAR", "TOTAL_IMPRESSION", "TOTAL_CLICKTHROUGH"],
});
Inferred record types
Inferred record types
Resource without an operational record table
Configuration: account
Case:pinterest-ads/analytics/async/account.
Connection and resource configuration are declared by this exact case.
Credential kind: pinterest-ads. Keep credential material in the private credential inventory.
| Setting | Type | Required | Owner |
|---|---|---|---|
adAccountId | string | Yes | Resource binding |
Complete configuration contract
Complete configuration contract
{
"setup": [],
"resource": {
"access": {},
"defaults": {},
"connector": "pinterest-ads",
"output": {
"kind": "single",
"collection": "reports"
},
"credential_kind": "pinterest-ads",
"connection_fields": [],
"address": {
"kind": "fixed",
"url": "https://api.pinterest.com"
}
},
"connection_setup": {
"type": "object",
"value": {
"adAccountId": {
"fieldType": {
"type": "string"
},
"optional": false
}
}
},
"execution": null
}
| Contract | Meaning |
|---|---|
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |
Complete native profile
Complete native profile
{
"movement": {
"exchanges": {
"create": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"file": {
"200": {
"placement": "retained_bytes",
"interpretation": "document",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"poll": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange create",
"limitBytes": null
}
},
{
"id": "acquire.2",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange file",
"limitBytes": null
}
},
{
"id": "acquire.3",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange poll",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1",
"acquire.2",
"acquire.3"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
Commands, occurrences and artifacts
Commands, occurrences and artifacts
{
"records": {
"reports": {
"protocol": "record_observation",
"coverage": "records",
"consistency": "observations",
"atomicity": "record",
"history": "observations",
"recordRefresh": false,
"reconciliation": false,
"notifications": false,
"snapshotMaxRows": null,
"profile": {
"movement": {
"exchanges": {
"create": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"file": {
"200": {
"placement": "retained_bytes",
"interpretation": "document",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"poll": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange create",
"limitBytes": null
}
},
{
"id": "acquire.2",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange file",
"limitBytes": null
}
},
{
"id": "acquire.3",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange poll",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1",
"acquire.2",
"acquire.3"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
}
},
"occurrences": null,
"artifacts": {
"raw_archive": false,
"native_file_transfer_limit_bytes": null,
"external_versions": false,
"files": {}
},
"commands": {}
}
| Requirement | Scope | Evidence | Result |
|---|---|---|---|
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-create.json | passed (2026-10-24T21:36:12.288Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-create-refused.json | passed (2026-10-24T21:36:12.288Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-poll-pending.json | passed (2026-10-24T21:36:12.289Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-account-rows.json | passed (2026-10-24T21:36:12.289Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-other-account-refused.json | passed (2026-10-24T21:36:12.289Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Native test: integrations/acquisition/acquisition_windows_preserve_sequences_and_restart_fences_old_work (shared_engine) | Execution result unavailable |
| identity-account | {“kind”:“connection”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-identity.json | passed (2026-10-24T21:36:12.290Z) |
Configuration: campaigns
Case:pinterest-ads/analytics/async/campaigns.
Connection and resource configuration are declared by this exact case.
Credential kind: pinterest-ads. Keep credential material in the private credential inventory.
| Setting | Type | Required | Owner |
|---|---|---|---|
adAccountId | string | Yes | Resource binding |
Complete configuration contract
Complete configuration contract
{
"setup": [],
"resource": {
"access": {},
"defaults": {},
"connector": "pinterest-ads",
"output": {
"kind": "single",
"collection": "reports"
},
"credential_kind": "pinterest-ads",
"connection_fields": [],
"address": {
"kind": "fixed",
"url": "https://api.pinterest.com"
}
},
"connection_setup": {
"type": "object",
"value": {
"adAccountId": {
"fieldType": {
"type": "string"
},
"optional": false
}
}
},
"execution": null
}
| Contract | Meaning |
|---|---|
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |
Complete native profile
Complete native profile
{
"movement": {
"exchanges": {
"create": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"file": {
"200": {
"placement": "retained_bytes",
"interpretation": "document",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"poll": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange create",
"limitBytes": null
}
},
{
"id": "acquire.2",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange file",
"limitBytes": null
}
},
{
"id": "acquire.3",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange poll",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1",
"acquire.2",
"acquire.3"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
Commands, occurrences and artifacts
Commands, occurrences and artifacts
{
"records": {
"reports": {
"protocol": "record_observation",
"coverage": "records",
"consistency": "observations",
"atomicity": "record",
"history": "observations",
"recordRefresh": false,
"reconciliation": false,
"notifications": false,
"snapshotMaxRows": null,
"profile": {
"movement": {
"exchanges": {
"create": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"file": {
"200": {
"placement": "retained_bytes",
"interpretation": "document",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
},
"poll": {
"200": {
"placement": "retained_bytes",
"interpretation": "json",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"400": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"401": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"403": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"404": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
},
"429": {
"placement": "retained_bytes",
"interpretation": "opaque",
"projectsBeforeRetention": false,
"retainedBodyLimitBytes": "524288",
"fileLimitBytes": null
}
}
},
"nativeInputLimitBytes": null,
"steps": [
{
"id": "acquire.1",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange create",
"limitBytes": null
}
},
{
"id": "acquire.2",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange file",
"limitBytes": null
}
},
{
"id": "acquire.3",
"inputs": [],
"action": {
"operation": "acquire",
"subject": "exchange poll",
"limitBytes": null
}
},
{
"id": "retain.1",
"inputs": [
"acquire.1",
"acquire.2",
"acquire.3"
],
"action": {
"operation": "retain",
"subject": "acquisition evidence",
"reason": "recovery",
"release": "acquisition_custody"
}
},
{
"id": "interpret.1",
"inputs": [
"retain.1"
],
"action": {
"operation": "interpret",
"subject": "acquired input",
"produces": "records"
}
},
{
"id": "materialize.1",
"inputs": [
"interpret.1"
],
"action": {
"operation": "materialize",
"subject": "source rows",
"reason": "serving",
"release": "replacement"
}
},
{
"id": "publish.1",
"inputs": [
"materialize.1"
],
"action": {
"operation": "publish",
"subject": "source rows",
"visibility": "with_acquisition"
}
}
]
},
"initial": "enumeration",
"changes": "observations",
"deletions": "unsupported",
"resume": "none",
"retentionMs": null,
"gap": "not_applicable",
"limits": {
"http_response_bytes": "524288"
},
"restrictions": [],
"commands": {}
}
}
},
"occurrences": null,
"artifacts": {
"raw_archive": false,
"native_file_transfer_limit_bytes": null,
"external_versions": false,
"files": {}
},
"commands": {}
}
| Requirement | Scope | Evidence | Result |
|---|---|---|---|
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-campaign-rows.json | passed (2026-10-24T21:36:12.291Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-numeric-id-refused.json | passed (2026-10-24T21:36:12.291Z) |
| page-publication-recovery | {“kind”:“collection”,“name”:“reports”} | Native test: integrations/acquisition/acquisition_windows_preserve_sequences_and_restart_fences_old_work (shared_engine) | Execution result unavailable |
| identity-account | {“kind”:“connection”} | Fixture: ./src/connectors/pinterest-ads/fixtures/reports-identity.json | passed (2026-10-24T21:36:12.291Z) |
Provider guidance
Compiled declaration examples and configuration details are published in the connector reference. Daily ad account (or listed campaign) analytics from Pinterest API v5’s synchronousGET /v5/ad_accounts/{id}/analytics (or /campaigns/analytics with up
to 250 campaignIds), granularity=DAY over 30-day requests, read as restated
report observations. Rows are keyed by (account or campaign id, DATE). Only
integer columns are offered and each is exact; spend and checkout value are
micro-dollars.
Synchronous analytics reach back 90 days. Older days are not read by
analytics.daily: every pass begins no earlier than 89 days before the UTC day
it runs, whatever start says.
analytics.async reads up to 914 days back through Pinterest’s asynchronous
report, one report per pass over windowDays (default 93; Pinterest allows
186): POST /v5/ad_accounts/{id}/reports (JSON body, granularity: DAY,
level ADVERTISER or CAMPAIGN with its id column, report_format: JSON),
then GET .../reports?token=... every pollSeconds (default 60) until
report_status is FINISHED; DOES_NOT_EXIST, EXPIRED, FAILED and
CANCELLED end the pass with a typed gap. The report file is a five-minute
storage link read without a credential. Pinterest’s reference does not document
the file’s layout; this mode reads it as open-source connectors do, one JSON
object keyed by entity whose members are arrays of rows naming the id column and
DATE, and reads ids as the digit strings Pinterest’s synchronous schema types
them as. A file laid out otherwise fails the pass. Campaign rows cover every
campaign, or the listed campaignIds (at most 500). Keys, exact columns, carried
windows and settled are those of analytics.daily, so a day read by both modes
is one row.
Conversions follow the declared windows (clickWindowDays, viewWindowDays,
engagementWindowDays; Pinterest’s defaults 30, 1 and 30) and
conversionReportTime. Reported at the time of the ad action, a later conversion
changes an earlier day, so restatementDays defaults to the longest window plus
two days; at the time of conversion, three days. Pinterest states no per-row
finality and documents no restatement bound, so settled is that declared
window’s basis.
The connection holds a pinterest-ads OAuth credential
(pinterestAds.credential, scope ads:read); setup names adAccountId.
Nothing here has run against Pinterest or been qualified.
Provider references
Provider references and prerequisites are maintained in the connector guidance above. No separate provider-documentation review date is recorded.Source and evidence
Canonical connector source, native analysis and check receipts. Connector artifact:905888ea276a2a28e36981a79e8142b2547ea451c3e63162cb6915ad4a7d1305.
The resource declaration examples above are compiled and compared with exact catalog declarations. Recorded checks apply only to their source, declaration and runtime identities. Configure a connection and inspect its status to establish deployment-specific readiness.