검색은 사용할 때만 로드됩니다. 아래에서 모든 분류를 살펴보세요.

분석 및 인사이트

매핑된 보고서 템플릿 필드 미리 보기

매핑된 보고서 템플릿 필드 미리 보기. 명시적으로 지정된 검토 완료 데이터셋과 버전을 사용하며, 데이터 소스를 자동으로 새로 고치지 않습니다. 렌더링 입력은 파이프를 통해 sosoapi report render --output FILE 명령으로 전달할 수 있습니다.

POST /analytics-api/reporting/templates/preview

계약 검토: · sha256:d6e85a113e8fb367

개요

매핑된 보고서 템플릿 필드 미리 보기. 명시적으로 지정된 검토 완료 데이터셋과 버전을 사용하며, 데이터 소스를 자동으로 새로 고치지 않습니다. 렌더링 입력은 파이프를 통해 sosoapi report render --output FILE 명령으로 전달할 수 있습니다.

HTTP 성공 응답은 완료가 아닌 접수를 뜻할 수 있습니다. 백그라운드 작업은 반환 ID를 저장하고 완료까지 같은 작업을 확인하세요. 예약 또는 접수 게시물은 플랫폼이 확인해야 게시 완료입니다. 클라이언트 시간 초과로 결과를 판단할 수 없습니다.

인증 및 권한

허용 자격 증명 유형
user_session, delegated_oauth, personal_access_token
위임된 기능
agent:operate
최소 Workspace 역할
viewer
접근 범위
이 사용자에게 접근 권한이 있는 리소스
모든 Workspace 동의 필요
아니요
상태 변경
아니요
작업 완료 시
synchronous_http_response

토큰은 소유자의 권한만 사용할 수 있습니다. 각 요청은 Workspace 멤버십, 리소스 소유권, 선택 Workspace, 부여 기능을 확인합니다. core와 full 프로필은 표시 도구를 바꾸며 접근 권한은 부여하지 않습니다.

요청 필드

필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.

요청 필드
필드 / 분기유형 / 필수 여부제약 조건
$object상위 객체에서 필수
  • additionalProperties: false
workspace_idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
versioninteger상위 객체에서 필수
  • minimum: 1
  • maximum: 1000000
datasetobject상위 객체에서 필수
  • additionalProperties: false
dataset.contractVersionstring상위 객체에서 필수
  • const: "analytics-report/v1"
dataset.idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.reviewedAtstring상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.selectionobject상위 객체에서 필수
  • additionalProperties: false
dataset.selection.workspaceIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.selection.accountIdsarray상위 객체에서 필수
  • minItems: 1
  • maxItems: 50
dataset.selection.accountIds[]string선택 / 항목
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.selection.platformsarray상위 객체에서 필수
  • minItems: 1
  • maxItems: 4
dataset.selection.platforms[]string선택 / 항목
  • enum: ["facebook","instagram","threads","youtube"]
dataset.selection.startDatestring상위 객체에서 필수
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
dataset.selection.endDatestring상위 객체에서 필수
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
dataset.selection.timezonestring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.accountsarray상위 객체에서 필수
  • maxItems: 50
dataset.accounts[]object선택 / 항목
  • additionalProperties: false
dataset.accounts[].idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.accounts[].workspaceIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.accounts[].platformstring상위 객체에서 필수
  • enum: ["facebook","instagram","threads","youtube"]
dataset.accounts[].namestring상위 객체에서 필수
  • maxLength: 500
dataset.accounts[].connectionStatusstring선택 / 항목
  • maxLength: 100
dataset.accounts[].healthMessagestring선택 / 항목
  • maxLength: 1000
dataset.postsarray상위 객체에서 필수
  • maxItems: 1000
dataset.posts[]object선택 / 항목
  • additionalProperties: false
dataset.posts[].social_post_idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.posts[].workspace_idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.posts[].social_account_idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.posts[].platformstring상위 객체에서 필수
  • enum: ["instagram","facebook","threads","youtube"]
dataset.posts[].provider_post_idstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 512
dataset.posts[].provider_published_atstring | null상위 객체에서 필수—
dataset.posts[].provider_published_atanyOf 1string상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.posts[].provider_published_atanyOf 2null상위 객체에서 필수—
dataset.posts[].content_formatstring | null상위 객체에서 필수—
dataset.posts[].content_formatanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.posts[].content_formatanyOf 2null상위 객체에서 필수—
dataset.posts[].permalinkstring | null상위 객체에서 필수—
dataset.posts[].permalinkanyOf 1string상위 객체에서 필수
  • format: "uri"
  • maxLength: 2048
dataset.posts[].permalinkanyOf 2null상위 객체에서 필수—
dataset.posts[].provider_statestring상위 객체에서 필수
  • enum: ["available","deleted","unavailable","unknown"]
dataset.posts[].first_seen_atstring상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.posts[].last_seen_atstring상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.posts[].scheduled_post_idstring | null상위 객체에서 필수—
dataset.posts[].scheduled_post_idanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.posts[].scheduled_post_idanyOf 2null상위 객체에서 필수—
dataset.posts[].provenanceobject상위 객체에서 필수
  • additionalProperties: false
dataset.posts[].provenance.providerstring상위 객체에서 필수
  • enum: ["instagram","facebook","threads","youtube"]
dataset.posts[].provenance.sourcestring상위 객체에서 필수
  • enum: ["provider_api","provider_webhook","publication_outcome","backfill"]
dataset.posts[].provenance.source_job_idstring | null상위 객체에서 필수—
dataset.posts[].provenance.source_job_idanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.posts[].provenance.source_job_idanyOf 2null상위 객체에서 필수—
dataset.posts[].provenance.provider_api_versionstring | null상위 객체에서 필수—
dataset.posts[].provenance.provider_api_versionanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 200
dataset.posts[].provenance.provider_api_versionanyOf 2null상위 객체에서 필수—
dataset.posts[].provenance.schema_versionstring | null상위 객체에서 필수—
dataset.posts[].provenance.schema_versionanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 200
dataset.posts[].provenance.schema_versionanyOf 2null상위 객체에서 필수—
dataset.sourcesarray상위 객체에서 필수
  • maxItems: 30
dataset.sources[]object선택 / 항목
  • additionalProperties: false
dataset.sources[].accountIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.sources[].platformstring상위 객체에서 필수
  • enum: ["facebook","instagram","threads","youtube"]
dataset.sources[].resourceKindstring상위 객체에서 필수
  • enum: ["account","post"]
dataset.sources[].providerResourceIdstring | null상위 객체에서 필수—
dataset.sources[].providerResourceIdanyOf 1string상위 객체에서 필수
  • maxLength: 512
dataset.sources[].providerResourceIdanyOf 2null상위 객체에서 필수—
dataset.sources[].requestIdstring | null상위 객체에서 필수—
dataset.sources[].requestIdanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.sources[].requestIdanyOf 2null상위 객체에서 필수—
dataset.sources[].statusstring상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed","pending","stale"]
dataset.sources[].reasonstring | null상위 객체에서 필수—
dataset.sources[].reasonanyOf 1string상위 객체에서 필수
  • maxLength: 8000
dataset.sources[].reasonanyOf 2null상위 객체에서 필수—
dataset.sources[].envelopeobject | null상위 객체에서 필수—
dataset.sources[].envelopeanyOf 1object상위 객체에서 필수
  • additionalProperties: false
dataset.sources[].envelope.contract_versionanyOf 1string상위 객체에서 필수
  • const: "provider-insights/v1"
dataset.sources[].envelope.request_idanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.sources[].envelope.platformanyOf 1string상위 객체에서 필수
  • enum: ["facebook","instagram","threads","youtube"]
dataset.sources[].envelope.resourceanyOf 1object상위 객체에서 필수
  • additionalProperties: false
dataset.sources[].envelope.resource.kindanyOf 1string상위 객체에서 필수
  • enum: ["account","post"]
dataset.sources[].envelope.resource.social_account_idanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.sources[].envelope.resource.provider_resource_idanyOf 1string | null상위 객체에서 필수—
dataset.sources[].envelope.provider_api_versionanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.sources[].envelope.fetched_atanyOf 1string상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.sources[].envelope.statusanyOf 1string상위 객체에서 필수
  • enum: ["available","partial","unavailable"]
dataset.sources[].envelope.availabilityanyOf 1array상위 객체에서 필수
  • minItems: 1
  • maxItems: 64
dataset.sources[].envelope.availability[]anyOf 1object선택 / 항목
  • additionalProperties: false
dataset.sources[].envelope.availability[].scopeanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 200
dataset.sources[].envelope.availability[].statusanyOf 1string상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed"]
dataset.sources[].envelope.availability[].reasonanyOf 1string선택 / 항목
  • minLength: 1
  • maxLength: 2000
dataset.sources[].envelope.availability[].diagnosticsanyOf 1object선택 / 항목
  • additionalProperties: false
dataset.sources[].envelope.availability[].diagnostics.http_statusanyOf 1integer상위 객체에서 필수
  • minimum: 0
  • maximum: 599
dataset.sources[].envelope.availability[].diagnostics.failed_stepanyOf 1string선택 / 항목
  • minLength: 1
  • maxLength: 200
dataset.sources[].envelope.availability[].diagnostics.provider_codeanyOf 1number | string선택 / 항목—
dataset.sources[].envelope.availability[].diagnostics.provider_codeanyOf 1 / anyOf 1number선택 / 항목—
dataset.sources[].envelope.availability[].diagnostics.provider_codeanyOf 1 / anyOf 2string선택 / 항목
  • maxLength: 100
dataset.sources[].envelope.availability[].diagnostics.provider_subcodeanyOf 1number | string선택 / 항목—
dataset.sources[].envelope.availability[].diagnostics.provider_subcodeanyOf 1 / anyOf 1number선택 / 항목—
dataset.sources[].envelope.availability[].diagnostics.provider_subcodeanyOf 1 / anyOf 2string선택 / 항목
  • maxLength: 100
dataset.sources[].envelope.availability[].diagnostics.provider_typeanyOf 1string선택 / 항목
  • maxLength: 200
dataset.sources[].envelope.availability[].diagnostics.is_transientanyOf 1boolean선택 / 항목—
dataset.sources[].envelope.availability[].diagnostics.provider_request_idanyOf 1string선택 / 항목
  • maxLength: 200
dataset.sources[].envelope.availability[].diagnostics.accessanyOf 1object선택 / 항목
  • additionalProperties: false
dataset.sources[].envelope.availability[].diagnostics.access.login_modeanyOf 1string상위 객체에서 필수
  • enum: ["instagram_login","facebook_login","threads_user"]
dataset.sources[].envelope.availability[].diagnostics.access.provider_hostanyOf 1string상위 객체에서 필수
  • maxLength: 200
dataset.sources[].envelope.availability[].diagnostics.access.required_permissionsanyOf 1array상위 객체에서 필수
  • maxItems: 16
dataset.sources[].envelope.availability[].diagnostics.access.required_permissions[]anyOf 1string선택 / 항목
  • maxLength: 100
dataset.sources[].envelope.availability[].diagnostics.access.current_connection_policy_permissionsanyOf 1array상위 객체에서 필수
  • maxItems: 16
dataset.sources[].envelope.availability[].diagnostics.access.current_connection_policy_permissions[]anyOf 1string선택 / 항목
  • maxLength: 100
dataset.sources[].envelope.availability[].diagnostics.access.granted_permissionsanyOf 1array | null상위 객체에서 필수—
dataset.sources[].envelope.availability[].diagnostics.access.granted_permissionsanyOf 1 / anyOf 1array상위 객체에서 필수
  • maxItems: 128
dataset.sources[].envelope.availability[].diagnostics.access.granted_permissions[]anyOf 1 / anyOf 1string선택 / 항목
  • maxLength: 100
dataset.sources[].envelope.availability[].diagnostics.access.granted_permissionsanyOf 1 / anyOf 2null상위 객체에서 필수—
dataset.sources[].envelope.availability[].diagnostics.access.grant_evidenceanyOf 1string상위 객체에서 필수
  • enum: ["exact","unknown"]
dataset.sources[].envelope.availability[].diagnostics.access.permission_stateanyOf 1string상위 객체에서 필수
  • enum: ["granted","missing","unknown"]
dataset.sources[].envelope.availability[].diagnostics.access.grant_observed_atanyOf 1string선택 / 항목
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.sources[].envelope.availability[].diagnostics.access.app_accessanyOf 1string상위 객체에서 필수
  • const: "unverified"
dataset.sources[].envelope.availability[].diagnostics.access.next_stepanyOf 1string상위 객체에서 필수
  • maxLength: 1500
dataset.sources[].envelope.provider_dataanyOf 1any JSON value | null상위 객체에서 필수—
dataset.sources[].envelope.provider_dataanyOf 1 / anyOf 1any JSON value상위 객체에서 필수—
dataset.sources[].envelope.provider_dataanyOf 1 / anyOf 2null상위 객체에서 필수—
dataset.sources[].envelope.requested_date_rangeanyOf 1object | null상위 객체에서 필수—
dataset.sources[].envelope.requested_date_rangeanyOf 1 / anyOf 1object상위 객체에서 필수
  • additionalProperties: false
dataset.sources[].envelope.requested_date_range.start_dateanyOf 1 / anyOf 1string상위 객체에서 필수
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
dataset.sources[].envelope.requested_date_range.end_dateanyOf 1 / anyOf 1string상위 객체에서 필수
  • pattern: "^\\d{4}-\\d{2}-\\d{2}$"
dataset.sources[].envelope.requested_date_rangeanyOf 1 / anyOf 2null상위 객체에서 필수—
dataset.sources[].envelope.cacheanyOf 1object상위 객체에서 필수
  • additionalProperties: false
dataset.sources[].envelope.cache.authoritativeanyOf 1boolean상위 객체에서 필수
  • const: false
dataset.sources[].envelope.cache.statusanyOf 1string상위 객체에서 필수
  • enum: ["stored","hit","bypassed"]
dataset.sources[].envelope.cache.expires_atanyOf 1string상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.sources[].envelopeanyOf 2null상위 객체에서 필수—
dataset.sources[].metricsarray상위 객체에서 필수
  • maxItems: 5000
dataset.sources[].metrics[]object선택 / 항목
  • additionalProperties: false
dataset.sources[].metrics[].keystring상위 객체에서 필수
  • minLength: 1
  • maxLength: 150
dataset.sources[].metrics[].definitionstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 1000
dataset.sources[].metrics[].unitstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.sources[].metrics[].grainstring상위 객체에서 필수
  • enum: ["post","account"]
dataset.sources[].metrics[].valuenumber | null상위 객체에서 필수—
dataset.sources[].metrics[].availabilitystring상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed","pending","stale"]
dataset.sources[].metrics[].reasonstring | null상위 객체에서 필수—
dataset.sources[].metrics[].reasonanyOf 1string상위 객체에서 필수
  • maxLength: 4000
dataset.sources[].metrics[].reasonanyOf 2null상위 객체에서 필수—
dataset.sources[].metrics[].measurementobject상위 객체에서 필수
  • additionalProperties: false
dataset.sources[].metrics[].measurement.kindstring상위 객체에서 필수
  • enum: ["lifetime","snapshot","period","unknown"]
dataset.sources[].metrics[].measurement.periodstring | null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.periodanyOf 1string상위 객체에서 필수
  • maxLength: 100
dataset.sources[].metrics[].measurement.periodanyOf 2null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.startstring | null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.startanyOf 1string상위 객체에서 필수
  • maxLength: 100
dataset.sources[].metrics[].measurement.startanyOf 2null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.endstring | null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.endanyOf 1string상위 객체에서 필수
  • maxLength: 100
dataset.sources[].metrics[].measurement.endanyOf 2null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.timezonestring | null상위 객체에서 필수—
dataset.sources[].metrics[].measurement.timezoneanyOf 1string상위 객체에서 필수
  • maxLength: 100
dataset.sources[].metrics[].measurement.timezoneanyOf 2null상위 객체에서 필수—
dataset.sources[].metrics[].sourcePathstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 2000
dataset.coverageobject상위 객체에서 필수
  • additionalProperties: false
dataset.coverage.populationstring상위 객체에서 필수
  • const: "discovered_posts"
dataset.coverage.postsCompleteboolean상위 객체에서 필수—
dataset.coverage.nextCursorstring | null상위 객체에서 필수—
dataset.coverage.nextCursoranyOf 1string상위 객체에서 필수
  • maxLength: 16384
dataset.coverage.nextCursoranyOf 2null상위 객체에서 필수—
dataset.coverage.postLimitinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 1000
dataset.coverage.postInsightsLimitinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 20
dataset.coverage.omittedPostInsightsinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 9007199254740991
dataset.coverage.notesarray상위 객체에서 필수
  • maxItems: 50
dataset.coverage.notes[]string선택 / 항목
  • maxLength: 2000
dataset.customMetricsarray상위 객체에서 필수
  • maxItems: 50
dataset.customMetrics[]object선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].namestring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].versioninteger상위 객체에서 필수
  • maximum: 9007199254740991
  • exclusiveMinimum: 0
dataset.customMetrics[].expressionstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 1000
dataset.customMetrics[].definitionstring상위 객체에서 필수
  • maxLength: 1000
dataset.customMetrics[].unitstring상위 객체에서 필수
  • maxLength: 100
dataset.customMetrics[].grainstring상위 객체에서 필수
  • enum: ["post","account","compatible_sum"]
dataset.customMetrics[].roundingobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].rounding.decimalPlacesinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 8
dataset.customMetrics[].rounding.modestring상위 객체에서 필수
  • const: "half_away_from_zero"
dataset.customMetrics[].inputsarray상위 객체에서 필수
  • maxItems: 5000
dataset.customMetrics[].inputs[]object선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].inputs[].requestIdstring | null상위 객체에서 필수—
dataset.customMetrics[].inputs[].requestIdanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].inputs[].requestIdanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].inputs[].sourcePathstring상위 객체에서 필수
  • maxLength: 2000
dataset.customMetrics[].inputs[].valuenumber | null상위 객체에서 필수—
dataset.customMetrics[].inputs[].availabilitystring상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed","pending","stale"]
dataset.customMetrics[].valuenumber | null상위 객체에서 필수—
dataset.customMetrics[].availabilitystring상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed","pending","stale"]
dataset.customMetrics[].reasonstring | null상위 객체에서 필수—
dataset.customMetrics[].reasonanyOf 1string상위 객체에서 필수
  • maxLength: 4000
dataset.customMetrics[].reasonanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].formulaobject선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].formula.contractVersionstring상위 객체에서 필수
  • const: "analytics-metric/v1"
dataset.customMetrics[].formula.idstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].formula.workspaceIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].formula.namestring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].formula.versioninteger상위 객체에서 필수
  • minimum: 1
  • maximum: 1000000
dataset.customMetrics[].formula.expressionstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 1000
dataset.customMetrics[].formula.fieldsarray상위 객체에서 필수
  • maxItems: 32
dataset.customMetrics[].formula.fields[]object선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].formula.fields[].identifierstring상위 객체에서 필수
  • pattern: "^[a-z][a-z0-9_]{0,63}$"
dataset.customMetrics[].formula.fields[].selectorobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].formula.fields[].selector.platformstring상위 객체에서 필수
  • enum: ["facebook","instagram","threads","youtube"]
dataset.customMetrics[].formula.fields[].selector.keystring상위 객체에서 필수
  • pattern: "^[A-Za-z][A-Za-z0-9_]{0,100}$"
dataset.customMetrics[].formula.fields[].selector.definitionstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 500
dataset.customMetrics[].formula.fields[].selector.unitstring상위 객체에서 필수
  • enum: ["count","seconds","minutes","percent","ratio"]
dataset.customMetrics[].formula.fields[].selector.grainstring상위 객체에서 필수
  • enum: ["post","account"]
dataset.customMetrics[].formula.fields[].selector.measurementKindstring상위 객체에서 필수
  • enum: ["lifetime","snapshot","period","unknown"]
dataset.customMetrics[].formula.fields[].selector.nativePeriodstring | null상위 객체에서 필수—
dataset.customMetrics[].formula.fields[].selector.nativePeriodanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 64
dataset.customMetrics[].formula.fields[].selector.nativePeriodanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].formula.fields[].selector.timezonestring | null상위 객체에서 필수—
dataset.customMetrics[].formula.fields[].selector.timezoneanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].formula.fields[].selector.timezoneanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].formula.fields[].aggregationstring상위 객체에서 필수
  • enum: ["single","sum"]
dataset.customMetrics[].formula.roundingobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].formula.rounding.decimalPlacesinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 8
dataset.customMetrics[].formula.rounding.modestring상위 객체에서 필수
  • const: "half_away_from_zero"
dataset.customMetrics[].calculationobject선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].calculation.contractVersionstring상위 객체에서 필수
  • const: "analytics-metric/v1"
dataset.customMetrics[].calculation.workspaceIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].calculation.datasetIdstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].calculation.formulaIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].calculation.namestring상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].calculation.versioninteger상위 객체에서 필수
  • maximum: 9007199254740991
  • exclusiveMinimum: 0
dataset.customMetrics[].calculation.expressionstring상위 객체에서 필수
  • maxLength: 1000
dataset.customMetrics[].calculation.roundingobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].calculation.rounding.decimalPlacesinteger상위 객체에서 필수
  • minimum: 0
  • maximum: 8
dataset.customMetrics[].calculation.rounding.modestring상위 객체에서 필수
  • const: "half_away_from_zero"
dataset.customMetrics[].calculation.valuenumber | null상위 객체에서 필수—
dataset.customMetrics[].calculation.unitstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 200
dataset.customMetrics[].calculation.statusstring상위 객체에서 필수
  • enum: ["available","not_returned"]
dataset.customMetrics[].calculation.codestring상위 객체에서 필수
  • enum: ["ok","invalid_expression","missing_input","incompatible_input","zero_denominator","numeric_limit","workspace_mismatch","ambiguous_input","unknown_exclusion"]
dataset.customMetrics[].calculation.reasonstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.reasonanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 500
dataset.customMetrics[].calculation.reasonanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.excludedInputIdsarray상위 객체에서 필수
  • maxItems: 5000
dataset.customMetrics[].calculation.excludedInputIds[]string선택 / 항목
  • minLength: 1
  • maxLength: 1500
dataset.customMetrics[].calculation.inputsarray상위 객체에서 필수
  • maxItems: 5000
dataset.customMetrics[].calculation.inputs[]object선택 / 항목
  • additionalProperties: false
dataset.customMetrics[].calculation.inputs[].inputIdstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 1500
dataset.customMetrics[].calculation.inputs[].selectorobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].calculation.inputs[].selector.platformstring상위 객체에서 필수
  • enum: ["facebook","instagram","threads","youtube"]
dataset.customMetrics[].calculation.inputs[].selector.keystring상위 객체에서 필수
  • pattern: "^[A-Za-z][A-Za-z0-9_]{0,100}$"
dataset.customMetrics[].calculation.inputs[].selector.definitionstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 500
dataset.customMetrics[].calculation.inputs[].selector.unitstring상위 객체에서 필수
  • enum: ["count","seconds","minutes","percent","ratio"]
dataset.customMetrics[].calculation.inputs[].selector.grainstring상위 객체에서 필수
  • enum: ["post","account"]
dataset.customMetrics[].calculation.inputs[].selector.measurementKindstring상위 객체에서 필수
  • enum: ["lifetime","snapshot","period","unknown"]
dataset.customMetrics[].calculation.inputs[].selector.nativePeriodstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].selector.nativePeriodanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 64
dataset.customMetrics[].calculation.inputs[].selector.nativePeriodanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].selector.timezonestring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].selector.timezoneanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].calculation.inputs[].selector.timezoneanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].valuenumber | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].availabilitystring상위 객체에서 필수
  • enum: ["available","partial","not_returned","unsupported","permission_required","threshold_not_met","no_data","failed","pending","stale"]
dataset.customMetrics[].calculation.inputs[].reasonstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].reasonanyOf 1string상위 객체에서 필수
  • maxLength: 8000
dataset.customMetrics[].calculation.inputs[].reasonanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurementobject상위 객체에서 필수
  • additionalProperties: false
dataset.customMetrics[].calculation.inputs[].measurement.kindstring상위 객체에서 필수
  • enum: ["lifetime","snapshot","period","unknown"]
dataset.customMetrics[].calculation.inputs[].measurement.periodstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.periodanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 64
dataset.customMetrics[].calculation.inputs[].measurement.periodanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.startstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.startanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 64
dataset.customMetrics[].calculation.inputs[].measurement.startanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.endstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.endanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 64
dataset.customMetrics[].calculation.inputs[].measurement.endanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.timezonestring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].measurement.timezoneanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 100
dataset.customMetrics[].calculation.inputs[].measurement.timezoneanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].requestIdstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].requestIdanyOf 1string상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].calculation.inputs[].requestIdanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].sourcePathstring상위 객체에서 필수
  • minLength: 1
  • maxLength: 1000
dataset.customMetrics[].calculation.inputs[].accountIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
dataset.customMetrics[].calculation.inputs[].providerResourceIdstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].providerResourceIdanyOf 1string상위 객체에서 필수
  • minLength: 1
  • maxLength: 512
dataset.customMetrics[].calculation.inputs[].providerResourceIdanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].fetchedAtstring | null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].fetchedAtanyOf 1string상위 객체에서 필수
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
dataset.customMetrics[].calculation.inputs[].fetchedAtanyOf 2null상위 객체에서 필수—
dataset.customMetrics[].calculation.inputs[].identifierstring상위 객체에서 필수
  • pattern: "^[a-z][a-z0-9_]{0,63}$"
dataset.customMetrics[].calculation.inputs[].includedboolean상위 객체에서 필수—
전체 JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "version": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000
    },
    "dataset": {
      "type": "object",
      "properties": {
        "contractVersion": {
          "type": "string",
          "const": "analytics-report/v1"
        },
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "reviewedAt": {
          "type": "string",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "format": "date-time"
        },
        "selection": {
          "type": "object",
          "properties": {
            "workspaceId": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "accountIds": {
              "minItems": 1,
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              }
            },
            "platforms": {
              "minItems": 1,
              "maxItems": 4,
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "facebook",
                  "instagram",
                  "threads",
                  "youtube"
                ]
              }
            },
            "startDate": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            },
            "endDate": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            },
            "timezone": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          },
          "required": [
            "workspaceId",
            "accountIds",
            "platforms",
            "startDate",
            "endDate",
            "timezone"
          ],
          "additionalProperties": false
        },
        "accounts": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "workspaceId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "platform": {
                "type": "string",
                "enum": [
                  "facebook",
                  "instagram",
                  "threads",
                  "youtube"
                ]
              },
              "name": {
                "type": "string",
                "maxLength": 500
              },
              "connectionStatus": {
                "type": "string",
                "maxLength": 100
              },
              "healthMessage": {
                "type": "string",
                "maxLength": 1000
              }
            },
            "required": [
              "id",
              "workspaceId",
              "platform",
              "name"
            ],
            "additionalProperties": false
          }
        },
        "posts": {
          "maxItems": 1000,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "social_post_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "workspace_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "social_account_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "platform": {
                "type": "string",
                "enum": [
                  "instagram",
                  "facebook",
                  "threads",
                  "youtube"
                ]
              },
              "provider_post_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 512
              },
              "provider_published_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                    "format": "date-time"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "content_format": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "permalink": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 2048,
                    "format": "uri"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provider_state": {
                "type": "string",
                "enum": [
                  "available",
                  "deleted",
                  "unavailable",
                  "unknown"
                ]
              },
              "first_seen_at": {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                "format": "date-time"
              },
              "last_seen_at": {
                "type": "string",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                "format": "date-time"
              },
              "scheduled_post_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "provenance": {
                "type": "object",
                "properties": {
                  "provider": {
                    "type": "string",
                    "enum": [
                      "instagram",
                      "facebook",
                      "threads",
                      "youtube"
                    ]
                  },
                  "source": {
                    "type": "string",
                    "enum": [
                      "provider_api",
                      "provider_webhook",
                      "publication_outcome",
                      "backfill"
                    ]
                  },
                  "source_job_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "provider_api_version": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "schema_version": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 200
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "provider",
                  "source",
                  "source_job_id",
                  "provider_api_version",
                  "schema_version"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "social_post_id",
              "workspace_id",
              "social_account_id",
              "platform",
              "provider_post_id",
              "provider_published_at",
              "content_format",
              "permalink",
              "provider_state",
              "first_seen_at",
              "last_seen_at",
              "scheduled_post_id",
              "provenance"
            ],
            "additionalProperties": false
          }
        },
        "sources": {
          "maxItems": 30,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "accountId": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "platform": {
                "type": "string",
                "enum": [
                  "facebook",
                  "instagram",
                  "threads",
                  "youtube"
                ]
              },
              "resourceKind": {
                "type": "string",
                "enum": [
                  "account",
                  "post"
                ]
              },
              "providerResourceId": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 512
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "requestId": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "status": {
                "type": "string",
                "enum": [
                  "available",
                  "partial",
                  "not_returned",
                  "unsupported",
                  "permission_required",
                  "threshold_not_met",
                  "no_data",
                  "failed",
                  "pending",
                  "stale"
                ]
              },
              "reason": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 8000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "envelope": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "contract_version": {
                        "type": "string",
                        "const": "provider-insights/v1"
                      },
                      "request_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                      },
                      "platform": {
                        "type": "string",
                        "enum": [
                          "facebook",
                          "instagram",
                          "threads",
                          "youtube"
                        ]
                      },
                      "resource": {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "account",
                              "post"
                            ]
                          },
                          "social_account_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                          },
                          "provider_resource_id": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "kind",
                          "social_account_id",
                          "provider_resource_id"
                        ],
                        "additionalProperties": false
                      },
                      "provider_api_version": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100
                      },
                      "fetched_at": {
                        "type": "string",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                        "format": "date-time"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "partial",
                          "unavailable"
                        ]
                      },
                      "availability": {
                        "minItems": 1,
                        "maxItems": 64,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "scope": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 200
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "available",
                                "partial",
                                "not_returned",
                                "unsupported",
                                "permission_required",
                                "threshold_not_met",
                                "no_data",
                                "failed"
                              ]
                            },
                            "reason": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 2000
                            },
                            "diagnostics": {
                              "type": "object",
                              "properties": {
                                "http_status": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 599
                                },
                                "failed_step": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 200
                                },
                                "provider_code": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "string",
                                      "maxLength": 100
                                    }
                                  ]
                                },
                                "provider_subcode": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "string",
                                      "maxLength": 100
                                    }
                                  ]
                                },
                                "provider_type": {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                "is_transient": {
                                  "type": "boolean"
                                },
                                "provider_request_id": {
                                  "type": "string",
                                  "maxLength": 200
                                },
                                "access": {
                                  "type": "object",
                                  "properties": {
                                    "login_mode": {
                                      "type": "string",
                                      "enum": [
                                        "instagram_login",
                                        "facebook_login",
                                        "threads_user"
                                      ]
                                    },
                                    "provider_host": {
                                      "type": "string",
                                      "maxLength": 200
                                    },
                                    "required_permissions": {
                                      "maxItems": 16,
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "maxLength": 100
                                      }
                                    },
                                    "current_connection_policy_permissions": {
                                      "maxItems": 16,
                                      "type": "array",
                                      "items": {
                                        "type": "string",
                                        "maxLength": 100
                                      }
                                    },
                                    "granted_permissions": {
                                      "anyOf": [
                                        {
                                          "maxItems": 128,
                                          "type": "array",
                                          "items": {
                                            "type": "string",
                                            "maxLength": 100
                                          }
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "grant_evidence": {
                                      "type": "string",
                                      "enum": [
                                        "exact",
                                        "unknown"
                                      ]
                                    },
                                    "permission_state": {
                                      "type": "string",
                                      "enum": [
                                        "granted",
                                        "missing",
                                        "unknown"
                                      ]
                                    },
                                    "grant_observed_at": {
                                      "type": "string",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                                      "format": "date-time"
                                    },
                                    "app_access": {
                                      "type": "string",
                                      "const": "unverified"
                                    },
                                    "next_step": {
                                      "type": "string",
                                      "maxLength": 1500
                                    }
                                  },
                                  "required": [
                                    "login_mode",
                                    "provider_host",
                                    "required_permissions",
                                    "current_connection_policy_permissions",
                                    "granted_permissions",
                                    "grant_evidence",
                                    "permission_state",
                                    "app_access",
                                    "next_step"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "http_status"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "scope",
                            "status"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "provider_data": {
                        "anyOf": [
                          {},
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "requested_date_range": {
                        "anyOf": [
                          {
                            "type": "object",
                            "properties": {
                              "start_date": {
                                "type": "string",
                                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                              },
                              "end_date": {
                                "type": "string",
                                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                              }
                            },
                            "required": [
                              "start_date",
                              "end_date"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "cache": {
                        "type": "object",
                        "properties": {
                          "authoritative": {
                            "type": "boolean",
                            "const": false
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "stored",
                              "hit",
                              "bypassed"
                            ]
                          },
                          "expires_at": {
                            "type": "string",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                            "format": "date-time"
                          }
                        },
                        "required": [
                          "authoritative",
                          "status",
                          "expires_at"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "contract_version",
                      "request_id",
                      "platform",
                      "resource",
                      "provider_api_version",
                      "fetched_at",
                      "status",
                      "availability",
                      "provider_data",
                      "requested_date_range",
                      "cache"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metrics": {
                "maxItems": 5000,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 150
                    },
                    "definition": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 1000
                    },
                    "unit": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "grain": {
                      "type": "string",
                      "enum": [
                        "post",
                        "account"
                      ]
                    },
                    "value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "availability": {
                      "type": "string",
                      "enum": [
                        "available",
                        "partial",
                        "not_returned",
                        "unsupported",
                        "permission_required",
                        "threshold_not_met",
                        "no_data",
                        "failed",
                        "pending",
                        "stale"
                      ]
                    },
                    "reason": {
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 4000
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "measurement": {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "enum": [
                            "lifetime",
                            "snapshot",
                            "period",
                            "unknown"
                          ]
                        },
                        "period": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 100
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "start": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 100
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "end": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 100
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "timezone": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 100
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "kind",
                        "period",
                        "start",
                        "end",
                        "timezone"
                      ],
                      "additionalProperties": false
                    },
                    "sourcePath": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 2000
                    }
                  },
                  "required": [
                    "key",
                    "definition",
                    "unit",
                    "grain",
                    "value",
                    "availability",
                    "reason",
                    "measurement",
                    "sourcePath"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "accountId",
              "platform",
              "resourceKind",
              "providerResourceId",
              "requestId",
              "status",
              "reason",
              "envelope",
              "metrics"
            ],
            "additionalProperties": false
          }
        },
        "coverage": {
          "type": "object",
          "properties": {
            "population": {
              "type": "string",
              "const": "discovered_posts"
            },
            "postsComplete": {
              "type": "boolean"
            },
            "nextCursor": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16384
                },
                {
                  "type": "null"
                }
              ]
            },
            "postLimit": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000
            },
            "postInsightsLimit": {
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "omittedPostInsights": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "notes": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 2000
              }
            }
          },
          "required": [
            "population",
            "postsComplete",
            "nextCursor",
            "postLimit",
            "postInsightsLimit",
            "omittedPostInsights",
            "notes"
          ],
          "additionalProperties": false
        },
        "customMetrics": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 100
              },
              "version": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "expression": {
                "type": "string",
                "minLength": 1,
                "maxLength": 1000
              },
              "definition": {
                "type": "string",
                "maxLength": 1000
              },
              "unit": {
                "type": "string",
                "maxLength": 100
              },
              "grain": {
                "type": "string",
                "enum": [
                  "post",
                  "account",
                  "compatible_sum"
                ]
              },
              "rounding": {
                "type": "object",
                "properties": {
                  "decimalPlaces": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 8
                  },
                  "mode": {
                    "type": "string",
                    "const": "half_away_from_zero"
                  }
                },
                "required": [
                  "decimalPlaces",
                  "mode"
                ],
                "additionalProperties": false
              },
              "inputs": {
                "maxItems": 5000,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "requestId": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "sourcePath": {
                      "type": "string",
                      "maxLength": 2000
                    },
                    "value": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "availability": {
                      "type": "string",
                      "enum": [
                        "available",
                        "partial",
                        "not_returned",
                        "unsupported",
                        "permission_required",
                        "threshold_not_met",
                        "no_data",
                        "failed",
                        "pending",
                        "stale"
                      ]
                    }
                  },
                  "required": [
                    "requestId",
                    "sourcePath",
                    "value",
                    "availability"
                  ],
                  "additionalProperties": false
                }
              },
              "value": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "availability": {
                "type": "string",
                "enum": [
                  "available",
                  "partial",
                  "not_returned",
                  "unsupported",
                  "permission_required",
                  "threshold_not_met",
                  "no_data",
                  "failed",
                  "pending",
                  "stale"
                ]
              },
              "reason": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 4000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "formula": {
                "type": "object",
                "properties": {
                  "contractVersion": {
                    "type": "string",
                    "const": "analytics-metric/v1"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 1000000
                  },
                  "expression": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 1000
                  },
                  "fields": {
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "identifier": {
                          "type": "string",
                          "pattern": "^[a-z][a-z0-9_]{0,63}$"
                        },
                        "selector": {
                          "type": "object",
                          "properties": {
                            "platform": {
                              "type": "string",
                              "enum": [
                                "facebook",
                                "instagram",
                                "threads",
                                "youtube"
                              ]
                            },
                            "key": {
                              "type": "string",
                              "pattern": "^[A-Za-z][A-Za-z0-9_]{0,100}$"
                            },
                            "definition": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 500
                            },
                            "unit": {
                              "type": "string",
                              "enum": [
                                "count",
                                "seconds",
                                "minutes",
                                "percent",
                                "ratio"
                              ]
                            },
                            "grain": {
                              "type": "string",
                              "enum": [
                                "post",
                                "account"
                              ]
                            },
                            "measurementKind": {
                              "type": "string",
                              "enum": [
                                "lifetime",
                                "snapshot",
                                "period",
                                "unknown"
                              ]
                            },
                            "nativePeriod": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "timezone": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "platform",
                            "key",
                            "definition",
                            "unit",
                            "grain",
                            "measurementKind",
                            "nativePeriod",
                            "timezone"
                          ],
                          "additionalProperties": false
                        },
                        "aggregation": {
                          "type": "string",
                          "enum": [
                            "single",
                            "sum"
                          ]
                        }
                      },
                      "required": [
                        "identifier",
                        "selector",
                        "aggregation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "rounding": {
                    "type": "object",
                    "properties": {
                      "decimalPlaces": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 8
                      },
                      "mode": {
                        "type": "string",
                        "const": "half_away_from_zero"
                      }
                    },
                    "required": [
                      "decimalPlaces",
                      "mode"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "contractVersion",
                  "id",
                  "workspaceId",
                  "name",
                  "version",
                  "expression",
                  "fields",
                  "rounding"
                ],
                "additionalProperties": false
              },
              "calculation": {
                "type": "object",
                "properties": {
                  "contractVersion": {
                    "type": "string",
                    "const": "analytics-metric/v1"
                  },
                  "workspaceId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "datasetId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "formulaId": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "version": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "expression": {
                    "type": "string",
                    "maxLength": 1000
                  },
                  "rounding": {
                    "type": "object",
                    "properties": {
                      "decimalPlaces": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 8
                      },
                      "mode": {
                        "type": "string",
                        "const": "half_away_from_zero"
                      }
                    },
                    "required": [
                      "decimalPlaces",
                      "mode"
                    ],
                    "additionalProperties": false
                  },
                  "value": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "unit": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 200
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "available",
                      "not_returned"
                    ]
                  },
                  "code": {
                    "type": "string",
                    "enum": [
                      "ok",
                      "invalid_expression",
                      "missing_input",
                      "incompatible_input",
                      "zero_denominator",
                      "numeric_limit",
                      "workspace_mismatch",
                      "ambiguous_input",
                      "unknown_exclusion"
                    ]
                  },
                  "reason": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 500
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "excludedInputIds": {
                    "maxItems": 5000,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 1500
                    }
                  },
                  "inputs": {
                    "maxItems": 5000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "inputId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 1500
                        },
                        "selector": {
                          "type": "object",
                          "properties": {
                            "platform": {
                              "type": "string",
                              "enum": [
                                "facebook",
                                "instagram",
                                "threads",
                                "youtube"
                              ]
                            },
                            "key": {
                              "type": "string",
                              "pattern": "^[A-Za-z][A-Za-z0-9_]{0,100}$"
                            },
                            "definition": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 500
                            },
                            "unit": {
                              "type": "string",
                              "enum": [
                                "count",
                                "seconds",
                                "minutes",
                                "percent",
                                "ratio"
                              ]
                            },
                            "grain": {
                              "type": "string",
                              "enum": [
                                "post",
                                "account"
                              ]
                            },
                            "measurementKind": {
                              "type": "string",
                              "enum": [
                                "lifetime",
                                "snapshot",
                                "period",
                                "unknown"
                              ]
                            },
                            "nativePeriod": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "timezone": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "platform",
                            "key",
                            "definition",
                            "unit",
                            "grain",
                            "measurementKind",
                            "nativePeriod",
                            "timezone"
                          ],
                          "additionalProperties": false
                        },
                        "value": {
                          "type": [
                            "number",
                            "null"
                          ]
                        },
                        "availability": {
                          "type": "string",
                          "enum": [
                            "available",
                            "partial",
                            "not_returned",
                            "unsupported",
                            "permission_required",
                            "threshold_not_met",
                            "no_data",
                            "failed",
                            "pending",
                            "stale"
                          ]
                        },
                        "reason": {
                          "anyOf": [
                            {
                              "type": "string",
                              "maxLength": 8000
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "measurement": {
                          "type": "object",
                          "properties": {
                            "kind": {
                              "type": "string",
                              "enum": [
                                "lifetime",
                                "snapshot",
                                "period",
                                "unknown"
                              ]
                            },
                            "period": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "start": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "end": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 64
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "timezone": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 100
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "kind",
                            "period",
                            "start",
                            "end",
                            "timezone"
                          ],
                          "additionalProperties": false
                        },
                        "requestId": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "sourcePath": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 1000
                        },
                        "accountId": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "providerResourceId": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 512
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "fetchedAt": {
                          "anyOf": [
                            {
                              "type": "string",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
                              "format": "date-time"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "identifier": {
                          "type": "string",
                          "pattern": "^[a-z][a-z0-9_]{0,63}$"
                        },
                        "included": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "inputId",
                        "selector",
                        "value",
                        "availability",
                        "reason",
                        "measurement",
                        "requestId",
                        "sourcePath",
                        "accountId",
                        "providerResourceId",
                        "fetchedAt",
                        "identifier",
                        "included"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "contractVersion",
                  "workspaceId",
                  "datasetId",
                  "formulaId",
                  "name",
                  "version",
                  "expression",
                  "rounding",
                  "value",
                  "unit",
                  "status",
                  "code",
                  "reason",
                  "excludedInputIds",
                  "inputs"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "id",
              "name",
              "version",
              "expression",
              "definition",
              "unit",
              "grain",
              "rounding",
              "inputs",
              "value",
              "availability",
              "reason"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "contractVersion",
        "id",
        "reviewedAt",
        "selection",
        "accounts",
        "posts",
        "sources",
        "coverage",
        "customMetrics"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "workspace_id",
    "id",
    "version",
    "dataset"
  ],
  "additionalProperties": false
}

응답 및 완료

성공 HTTP 상태: 200. 작업 완료 시: synchronous_http_response.

HTTP 성공 응답은 완료가 아닌 접수를 뜻할 수 있습니다. 백그라운드 작업은 반환 ID를 저장하고 완료까지 같은 작업을 확인하세요. 예약 또는 접수 게시물은 플랫폼이 확인해야 게시 완료입니다. 클라이언트 시간 초과로 결과를 판단할 수 없습니다.

필수는 상위 객체와 선택 분기 안에서 필수라는 뜻입니다. 필수 자식이 선택적 상위 객체를 필수로 만들지는 않습니다. 아래 규칙과 필드명은 계약에서 복사했습니다.

응답 및 완료
필드 / 분기유형 / 필수 여부제약 조건
$object상위 객체에서 필수—
datasetIdstring상위 객체에서 필수
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
sourceSha256string상위 객체에서 필수
  • pattern: "^[a-f0-9]{64}$"
fingerprintstring상위 객체에서 필수
  • pattern: "^[a-f0-9]{64}$"
valuesarray상위 객체에서 필수
  • maxItems: 100
values[]object선택 / 항목—
values[].namestring상위 객체에서 필수
  • maxLength: 64
values[].requiredboolean상위 객체에서 필수—
values[].kindstring | null상위 객체에서 필수—
values[].kindanyOf 1string상위 객체에서 필수
  • enum: ["text","selection","metric","formula","table","chart"]
values[].kindanyOf 2null상위 객체에서 필수—
values[].textstring상위 객체에서 필수—
values[].statusstring상위 객체에서 필수
  • enum: ["resolved","missing","unavailable"]
values[].reasonstring | null상위 객체에서 필수—
values[].rowsarray선택 / 항목—
values[].rows[]array선택 / 항목—
values[].rows[][]string선택 / 항목—
values[].chartarray선택 / 항목—
values[].chart[]object선택 / 항목—
values[].chart[].labelstring상위 객체에서 필수—
values[].chart[].valuenumber상위 객체에서 필수—
blockingarray상위 객체에서 필수—
blocking[]string선택 / 항목—
warningsarray상위 객체에서 필수—
warnings[]string선택 / 항목—
전체 JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "datasetId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "sourceSha256": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    },
    "fingerprint": {
      "type": "string",
      "pattern": "^[a-f0-9]{64}$"
    },
    "values": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 64
          },
          "required": {
            "type": "boolean"
          },
          "kind": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "text",
                  "selection",
                  "metric",
                  "formula",
                  "table",
                  "chart"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "text": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "resolved",
              "missing",
              "unavailable"
            ]
          },
          "reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "rows": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "chart": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "value": {
                  "type": "number"
                }
              },
              "required": [
                "label",
                "value"
              ]
            }
          }
        },
        "required": [
          "name",
          "required",
          "kind",
          "text",
          "status",
          "reason"
        ]
      }
    },
    "blocking": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "datasetId",
    "sourceSha256",
    "fingerprint",
    "values",
    "blocking",
    "warnings"
  ]
}

오류 및 안전한 재시도

HTTP 상태와 응답 본문을 확인하세요. 400 검증 오류에는 ZodError가 포함될 수 있으며, 핸들러 오류는 error, message, code 필드를 사용합니다. 진단용 request_id 또는 x-request-id를 자격 증명 없이 보관하세요. 401/403 접근 오류는 재시도 전에 해결하고 429에는 Retry-After를 따르세요. 쓰기 결과가 불확실하거나 5xx를 반환하면 먼저 기존 결과를 읽으세요. 지원하는 작업에서만 멱등성 키를 재사용하세요. 재시도 동작은 작업마다 다르며 정확히 한 번 전송을 보장하지 않습니다.

문제 해결 안내

예제

예제는 스키마로 확인한 가상 값을 사용합니다. ID를 사용 권한이 있는 값으로, 미디어를 준비된 에셋으로, 날짜를 확인된 게시 시각으로 바꾸세요. 쓰기 제출 전에 계정 적격성을 확인하세요. 이 페이지는 API 요청을 보내지 않습니다.

서버에서 SOSOAPI_ACCESS_TOKEN에 이 작업이 허용하는 자격 증명을 설정하고 브라우저 코드에 넣지 마세요. 에이전트는 sosoapi auth login으로 브라우저 로그인하며 CLI가 자격 증명을 갱신하게 하세요.

request.json

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 1,
  "dataset": {
    "contractVersion": "analytics-report/v1",
    "id": "11111111-1111-4111-8111-111111111111",
    "reviewedAt": "2099-01-15T09:00:00Z",
    "selection": {
      "workspaceId": "11111111-1111-4111-8111-111111111111",
      "accountIds": [
        "11111111-1111-4111-8111-111111111111"
      ],
      "platforms": [
        "facebook"
      ],
      "startDate": "2099-01-15",
      "endDate": "2099-01-15",
      "timezone": "UTC"
    },
    "accounts": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "workspaceId": "11111111-1111-4111-8111-111111111111",
        "platform": "facebook",
        "name": "Fictional report account"
      }
    ],
    "posts": [],
    "sources": [],
    "coverage": {
      "population": "discovered_posts",
      "postsComplete": false,
      "nextCursor": null,
      "postLimit": 0,
      "postInsightsLimit": 0,
      "omittedPostInsights": 0,
      "notes": []
    },
    "customMetrics": []
  }
}

cURL

curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/analytics-api/reporting/templates/preview" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

JavaScript

// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/analytics-api/reporting/templates/preview", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 1,
  "dataset": {
    "contractVersion": "analytics-report/v1",
    "id": "11111111-1111-4111-8111-111111111111",
    "reviewedAt": "2099-01-15T09:00:00Z",
    "selection": {
      "workspaceId": "11111111-1111-4111-8111-111111111111",
      "accountIds": [
        "11111111-1111-4111-8111-111111111111"
      ],
      "platforms": [
        "facebook"
      ],
      "startDate": "2099-01-15",
      "endDate": "2099-01-15",
      "timezone": "UTC"
    },
    "accounts": [
      {
        "id": "11111111-1111-4111-8111-111111111111",
        "workspaceId": "11111111-1111-4111-8111-111111111111",
        "platform": "facebook",
        "name": "Fictional report account"
      }
    ],
    "posts": [],
    "sources": [],
    "coverage": {
      "population": "discovered_posts",
      "postsComplete": false,
      "nextCursor": null,
      "postLimit": 0,
      "postInsightsLimit": 0,
      "omittedPostInsights": 0,
      "notes": []
    },
    "customMetrics": []
  }
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.

CLI

npx sosoapi api post /analytics-api/reporting/templates/preview < request.json

합성 응답 예제

{
  "datasetId": "11111111-1111-4111-8111-111111111111",
  "sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "fingerprint": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "values": [],
  "blocking": [],
  "warnings": []
}

MCP: sosoapi_preview_report_template