{"_id":"@bestieapp/tiktok-marketing-api","_rev":"4-7b5d24591374a37cef501f02ea56b96e","name":"@bestieapp/tiktok-marketing-api","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@bestieapp/tiktok-marketing-api","version":"0.0.1","description":"Marketing API for TikTok","main":"build/index.js","types":"build/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","prepare":"npm run build","lint":"eslint src/**/* --ext .ts","prepublishOnly":"npm run lint","preversion":"npm run lint"},"repository":{"type":"git","url":"git@ssh.dev.azure.com:v3/agencywithin/AWPL/tiktok-api"},"keywords":["TikTok"],"author":{"name":"Bestie"},"license":"ISC","devDependencies":{"@types/node":"^18.7.9","@types/node-fetch":"^2.6.2","@typescript-eslint/eslint-plugin":"^5.33.1","@typescript-eslint/parser":"^5.33.1","eslint":"^8.22.0","typescript":"^4.7.4"},"dependencies":{"axios":"^0.27.2","form-data":"^4.0.0"},"gitHead":"5b28610fb35faaa355e3ac56f6d0218347f00f4b","_id":"@bestieapp/tiktok-marketing-api@0.0.1","_nodeVersion":"16.9.1","_npmVersion":"7.21.1","dist":{"integrity":"sha512-ghs5S1R+5UVyrXplAsgiuEI2qZjCw8rmPr18hFObgN+ruVDX6pCO4b6Nm2PKIlEiUR/3k/OibMiDZL79mSba0g==","shasum":"432c318a49622235fdd9e7d512406dc71f2381be","tarball":"https://registry.npmjs.org/@bestieapp/tiktok-marketing-api/-/tiktok-marketing-api-0.0.1.tgz","fileCount":24,"unpackedSize":61038,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBTRq59ahUJbEJAgoDBaAcGi3qe0qsXW5TKHlC3MhT7bAiEAv6MdgOKvZy6V/HwxBKqlY4vLRfMKJP3nsCftXI84hTk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLzKwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCQw/8DoQCCGhTx4E2z7/VSah/Bs3BkFk8SXY7PWRd1Pszb25VG9VU\r\nXllyvip6z4fwYwE4EL4uq6+KQIZnkRnIxkbt21rF/GW319BNlB/X1i8K8v3U\r\nOMHPQnNMoJtJOD11we8PPpwc6AgZKGLcGb49przfqUr3+SfaFjLiPVREQBUQ\r\n/racwppnpLZntZMa48yEOEV367vB4PiM4tTo55dcrsqVhNFMbrEoYeh+erai\r\nj+BwAkflAbpt9WbEnfh34cXWh4altxgBFOVZsW4cP+7UTVTJ2Mqs/WYsj1nJ\r\nOY9fxfI1+v6JGDDDblaXmkDumMSQAIWg4FX5OgLgRpvoomXV1Y0cqIOvVxFB\r\nzSWuwypRYF4Zn+Va0oHWfImMiq6wUtYG1eVmPZ59R/R4w6mLcNTeE5YE7URB\r\nOAZ6GFRtKMAWAFVWWQDGcvzG3HeHLpOdA+lGhTFSGWad3cfrP3z+dkz3zVen\r\nez+v0yG3nXdV/tEwWhnE7sTqmAjSncCDnx0BNxIONkfTCD4yxMcg5JtYP3Hm\r\njKnKRUIrGo+jsredv/72yp6XLDpzQOz0D0MUXf2JQ3FGxqiX9QwkZ62wbqUt\r\nT8L4yQXetGBiKBKcssHmujOtsPFW9c5C7a/N+gfZL4BgCvC7u78s2iF3+QMn\r\n/bTMGxae9sSj58XGjJjtXvOOTfu+9Mz3N0U=\r\n=tUHR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dancongerbestie","email":"dan@bestieapp.co"},"directories":{},"maintainers":[{"name":"dancongerbestie","email":"dan@bestieapp.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tiktok-marketing-api_0.0.1_1664037551999_0.7881527072789545"},"_hasShrinkwrap":false},"0.0.2":{"name":"@bestieapp/tiktok-marketing-api","version":"0.0.2","description":"Marketing API for TikTok","main":"build/index.js","types":"build/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","prepare":"npm run build","lint":"eslint src/**/* --ext .ts","prepublishOnly":"npm run lint","preversion":"npm run lint"},"repository":{"type":"git","url":"git@ssh.dev.azure.com:v3/agencywithin/AWPL/tiktok-api"},"keywords":["TikTok"],"author":{"name":"Bestie"},"license":"ISC","devDependencies":{"@types/node":"^18.7.9","@types/node-fetch":"^2.6.2","@typescript-eslint/eslint-plugin":"^5.33.1","@typescript-eslint/parser":"^5.33.1","eslint":"^8.22.0","typescript":"^4.7.4"},"dependencies":{"axios":"^0.27.2","form-data":"^4.0.0"},"gitHead":"6b1a7bed64fb00e85d59515e38f2db292e294264","_id":"@bestieapp/tiktok-marketing-api@0.0.2","_nodeVersion":"16.9.1","_npmVersion":"7.21.1","dist":{"integrity":"sha512-pTUjiIabsgMA41ixxnjax81JW9PmsRoszKDwOWo3DESXjWrnI9ymVOT3LhPArR+zTAIaAIjZzWjI04KOxfy5Tg==","shasum":"b48ef5ab87c51d5bc83f7ae623f0460050eb0b08","tarball":"https://registry.npmjs.org/@bestieapp/tiktok-marketing-api/-/tiktok-marketing-api-0.0.2.tgz","fileCount":24,"unpackedSize":62699,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1bMoc+OOxVhsl0s4Z8ZI88DiEYXWXOBzDISROKU/tLQIhALXkOf1Cj28D9VDcFkt0CYa0QuxuSIPOR9OS06MdJdrW"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLzk8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonXhAAi3f2yH5gXcmLhgAS69Oa/cQirmi7rgevR36+lxF+h/UoFkRc\r\nDyuSwthrFmW+L8rvIbxM0SOjwVNXp+t3Bvq6IaoXIshOHqLqUeRziEgRylm4\r\nI74glzIsUrybSQSbc0P9lmS0mdE5DBhoI7s/Bk/j/rttk+PIHt/eGp8hQXHv\r\n43PAMUQJi8xyRSEVBdGqtjCaV4tWV6s7p3/ia9YKrku6Cicpc6Pag9zcnrUY\r\nou2M4cGetP2TB6+RqnVcKWTHTIT8pJyXHPXoDaHM2WgmCHfJgImrG2f79lq+\r\nvkA82R47aJSkPnyvUEqmM5wNN1wS2bm5dseZHvBz0NH38Re1eaYGlXaTGNnJ\r\n1+QExS3gPWYKFHSc48eLdVA5BWQJcrez9cULy8hsUx70lhsD25SoRl5rUdY0\r\nlUUPRsYj7eJZplHZThvNo5e05Qf7Ig0DYDS/cEowQ2Y8IGAwX5F/xtOK7vNa\r\n0V/uGjfYDizjnn1EH99FLN1TMAo+pWT2/7iLccZBIjlqXwJhK2465smLggqT\r\nJPTctjJWccUWVgvexle8ArzF2xXM1WBdV3H+Kn8CEsldty+g/lvwGgbbfYNv\r\niX0BEFEy4QNePdapXOQ1Z1pZSC/0Rqg/nb3zIXszMx3bAp7C47u9qJ5yIkJh\r\n9dNzGhWi/9VrhFNsCOlOGRrnr7+1N1ZqlV8=\r\n=7ynh\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dancongerbestie","email":"dan@bestieapp.co"},"directories":{},"maintainers":[{"name":"dancongerbestie","email":"dan@bestieapp.co"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tiktok-marketing-api_0.0.2_1664039228633_0.8142571900729969"},"_hasShrinkwrap":false}},"time":{"created":"2022-09-24T16:39:11.999Z","0.0.1":"2022-09-24T16:39:12.149Z","modified":"2022-11-30T04:26:30.530Z","0.0.2":"2022-09-24T17:07:08.827Z"},"maintainers":[{"email":"seth@bestieapp.co","name":"sethbestie"},{"email":"scott@bestieapp.co","name":"venture5912"},{"email":"donald@bestieapp.co","name":"donald-bestie"},{"email":"dan@bestieapp.co","name":"dancongerbestie"}],"description":"Marketing API for TikTok","keywords":["TikTok"],"repository":{"type":"git","url":"git@ssh.dev.azure.com:v3/agencywithin/AWPL/tiktok-api"},"author":{"name":"Bestie"},"license":"ISC","readme":"# Introduction\r\n\r\nNodeJS Wrapper for the Tik Tok Marketing API using Axios.\r\n\r\n# Getting Started\r\n\r\nTypeScript types are provided for arguments and outputs. As of `0.0.1` the only methods available are the following:\r\n\r\n## Debug Mode\r\n\r\nEnabling Debug mode on the `TikTokApi` object will log all Http Requests & Responses to the console.\r\n\r\n```typescript\r\nconst tikTokApi = new TikTokApi(\"<TOKEN>\", true);\r\n// or for OAuth\r\nconst tikTokApi = new TikTokApi(null, true);\r\n```\r\n\r\nDebug mode is `false` by default.\r\n\r\n## Auth\r\n\r\n### createAccessToken\r\n\r\nUses the Tik Tok Developer App Id, App Secret, and OAuth code to create an Access Token on behalf of the user.\r\n\r\nexample:\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(null);\r\nconst {\r\n  data: { access_token },\r\n} = await new TikTokAuth(tiktokApi).createAccessToken(\r\n  \"<SECRET>\",\r\n  \"<APP_ID>\",\r\n  code\r\n);\r\n```\r\n\r\n### getAuthorizedAdAccounts\r\n\r\nUses the Tik Tok Developer App Id, App Secret, and Access Token to request all the Ad Accounts the token has access to.\r\n\r\nexample:\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst {\r\n  data: { list },\r\n} = await new TikTokAuth(tiktokApi).getAuthorizedAdAccounts(\r\n  \"<SECRET>\",\r\n  \"<APP_ID>\"\r\n);\r\n```\r\n\r\n## Video\r\n\r\n### uploadVideoByFile\r\n\r\nUses the Tik Tok Video API to upload a file to Tik Tok Creatives library.\r\n\r\nexample:\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokVideo = new TikTokVideo(tiktokApi); // or `new TikTokVideo()` if the API is already instantiated\r\nconst { data } = await tiktokVideo.uploadVideoByFile(\"<FILE_PATH>\", {\r\n  advertiser_id: \"<ADVERTISER_ID>\",\r\n});\r\n```\r\n\r\n## Report\r\n\r\n### getBasicSyncReport\r\n\r\nUses the [Tik Tok Synchronous Report API](https://ads.tiktok.com/marketing_api/docs?id=1740302848100353) to pull a [Basic Report](https://ads.tiktok.com/marketing_api/docs?id=1738864915188737) from Tik Tok API.\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokVideo = new TikTokReport(tiktokApi); // or `new TikTokReport()` if the API is already instantiated\r\nconst { data } = await tiktokVideo.getBasicSyncReport({\r\n  advertiser_id: \"<ADVERTISER_ID\",\r\n  data_level: \"AUCTION_CAMPAIGN\",\r\n  dimensions: [\"campaign_id\"],\r\n  metrics: [\"spend\", \"impressions\"],\r\n  start_date: \"2022-09-05\",\r\n  end_date: \"2022-09-07\",\r\n  filtering: [\r\n    {\r\n      field_name: \"campaign_ids\",\r\n      filter_type: \"IN\",\r\n      filter_value: [\"<CAMPAIGN_ID>\"],\r\n    },\r\n  ],\r\n});\r\n```\r\n\r\n## Campaign\r\n\r\n### getCampaigns\r\n\r\nUses the [Tik Tok Campaign API](https://ads.tiktok.com/marketing_api/docs?id=1739315828649986) to retrieve Campaigns from Tik Tok API.\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokCampaign = new TikTokCampaign(tiktokApi); // or `new TikTokReport()` if the API is already instantiated\r\nconst { data } = await tiktokCampaign.getCampaigns(\"<ADVERTISER_ID>\", [\r\n  \"campaign_id\",\r\n  \"campaign_name\",\r\n  \"advertiser_id\",\r\n]);\r\n```\r\n\r\n## AdGroup\r\n\r\n### getAdGroups\r\n\r\nUses the [Tik Tok AdGroup API](https://ads.tiktok.com/marketing_api/docs?id=1739314558673922) to retrieve Ad Groups from Tik Tok API.\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokAdGroup = new TikTokAdGroup(tiktokApi); // or `new TikTokReport()` if the API is already instantiated\r\nconst { data } = await tiktokAdGroup.getAdGroups(\"<ADVERTISER_ID>\", [\r\n  \"adgroup_id\",\r\n  \"adgroup_name\",\r\n  \"advertiser_id\",\r\n]);\r\n```\r\n\r\n## Ad\r\n\r\n### getAds\r\n\r\nUses the [Tik Tok Ad API](https://ads.tiktok.com/marketing_api/docs?id=1735735588640770) to retrieve Ad from Tik Tok API.\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokVideo = new TikTokAd(tiktokApi); // or `new TikTokReport()` if the API is already instantiated\r\nconst { data } = await tiktokVideo.getAds(\"<ADVERTISER_ID>\", [\r\n  \"ad_id\",\r\n  \"ad_name\",\r\n  \"advertiser_id\",\r\n]);\r\n```\r\n\r\n## Ad Account\r\n\r\n### getAdAccountDetails\r\n\r\nUses the [Tik Tok Ad Account API](https://ads.tiktok.com/marketing_api/docs?id=1739593083610113) to retrieve Ad Accounts from Tik Tok API.\r\n\r\n```typescript\r\nconst tiktokApi = new TikTokApi(\"<ACCESS_TOKEN>\");\r\nconst tiktokVideo = new TikTokAdAccount(tiktokApi); // or `new TikTokReport()` if the API is already instantiated\r\nconst { data } = await tiktokVideo.getAdDetails(\r\n  [\"<ADVERTISER_ID>\"],\r\n  [\"status\", \"name\"]\r\n);\r\n```\r\n\r\n# Build and Test\r\n\r\nRun\r\n\r\n```shell\r\nnpm run build\r\n```\r\n\r\nTODO: Automated Test Suite\r\n","readmeFilename":"README.md"}