# LinkedIn API

- 링크드인 가입 & 로그인 하기.

- [https://developer.linkedin.com/](https://developer.linkedin.com/) 방문 후 Create app.

- **App Name, LinkedIn Page, App logo를 필수적으로 입력 및 등록을 해야합니다.**

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/094955_As2zsyY1fOK34h4sCH?q=80&s=1280x180&t=outside&f=webp)

- page가 없으시다면 [https://www.linkedin.com/company/setup/new](https://www.linkedin.com/company/setup/new) 에서 새롭게 만들 수 있습니다.

    - 회사, 브랜드 페이지 등을 선택할 수 있는데 저는 회사로 만들었습니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/094956_bOnvd69LkC0LmUKhMF?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/094957_Pm7Eg3MMnb7at0v70Q?q=80&s=1280x180&t=outside&f=webp)

# 앱 페이지 설명

---

- My apps에서 만들어진 앱을 확인할 수 있습니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/094958_zyNuoYKeILAIQK6kDl?q=80&s=1280x180&t=outside&f=webp)

### Setting Tab

-  연결된 페이지를 Verified를 진행해주세요.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/094959_gjVuyG9sjPWK9VLsWz?q=80&s=1280x180&t=outside&f=webp)

## Auth Tab

- **Application credentials : **Client ID, Client Secret 키 값을 메모장에 잘 저장해둡니다.

- **OAuth 2.0 settings**

    - 별도 Token을 발급 받아야 합니다. 토큰의 유효기간은 2달 가량 주어집니다. (5184000 seconds = 8 weeks 4days)

    - **Authorized redirect URLs에는 아래 URL이 추가되어 있는지 확인.**

        - https://datapopcorn.win/rest/oauth2-credential/callback

        - https://www.linkedin.com/developers/tools/oauth/redirect

- **OAuth 2.0 scopes (앱이 사용자를 대신하여 수행할 수 있는 작업을 정의합니다)**

    - **openid : 이름과 사진 사용**

    - profile : 이름과 사진 사용

    - w_member_social : 사용자를 대신하여 게시물, 댓글 및 반응 생성, 수정 및 삭제

    - email : LinkedIn 계정과 연결된 기본 이메일 주소 사용

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095000_Zeg2fG0c4kduUMORnL?q=80&s=1280x180&t=outside&f=webp)

## Products Tab

- App type: Standalone app 입니다. 아래 두가지 Products의 Request Access를 진행하세요.

- **Share on LinkedIn (scope : openId)**

    - /v2/userinfo

- **Sign In with LinkedIn using OpenID Connect (scope : w_member_social)**

    - /v2/aseets 

    - /v2/posts

    - /v2/reactions

    - /v2/shares

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095001_FhTTI7JMUlkXbAVVls?q=80&s=1280x180&t=outside&f=webp)

## Analytics Tab

- API 사용량을 체크합니다

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095002_0zmfmq4sFcvWdqgqou?q=80&s=1280x180&t=outside&f=webp)

## Team members

- 앱 관리자를 관리합니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095003_ImaGO3fyRVLI1EaPNO?q=80&s=1280x180&t=outside&f=webp)

# **Create OAuth 2.0 access token**

- OAuth Token Tools에서 Access Token 발급받기.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095004_bPXPc3geU1F8O3JBKX?q=80&s=1280x180&t=outside&f=webp)

- 모든 scope를 체크합니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095005_HtAGqDfVVgbCbEwbgA?q=80&s=1280x180&t=outside&f=webp)

- **Inspect OAuth 2.0 access token 에서 앞서 생성한 토큰의 유효성을 체크할 수 있습니다.**

    - Status을 통해 현재 이 토큰은 유효한 것으로 확인됩니다.

```
curl --location --request POST 'https://www.linkedin.com/oauth/v2/introspectToken' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'token=<YOUR TOKEN>' \
    --data-urlencode 'client_id=<>' \
    --data-urlencode 'client_secret=<>'
    
curl --location --request POST 'https://www.linkedin.com/oauth/v2/introspectToken' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'token=AQUlOLvYRLpibQmgCrAApwhOSIHMJQPuMSrBvxT15t8eQuLWfAb64tllCMOoMRLT2My9O64wOHDjUS-7Q0sahveNEfEyF5_h4saXNCKaP5FJJlXInD2wva36wLLZVq2WHCb5ATkTlJtFfv-6tLAqvqUE4D-DroqgI4aPvdg-_qRISSvrPMR9vVXSLjOLVk5mVXAuL1ceCkH9b9qcy37T0pqD9RvEra8irwMzE822GucOZptggh-UsaV3eCBp3hLafF5oIOz7AYfpm4_vKFVFLN5A_H6AcHSoR2BkBPR7PWQrFvDwzrrjDh4aTmLTVvJ6pUXwEOtoTUE-BFuha0WvWr2SmdnQxA' \
    --data-urlencode 'client_id=86tlyd8qd8jmvk' \
    --data-urlencode 'client_secret=WPL_AP1.3ubGoWHmnXS3lZRg.4dcj2w=='
```

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095005_U540HmHFJzccAjranv?q=80&s=1280x180&t=outside&f=webp)

## **Advertising API 신청과정 (페이지용)**

- 이 과정을 진행해야 `회사 페이지(조직)` 계정으로 포스팅을 할 수 있습니다. 개인 계정으로만 포스팅 하실 분들은 패스.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095006_3IoH8V2j9e8kK7eUZC?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095007_x84BosMrfGxmr8i1nw?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095008_LJF5uUYcSwiBpslz1u?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095010_EFiJ2q5JTx6kaxUj89?q=80&s=1280x180&t=outside&f=webp)

신청하고 나니  아래 처럼 권한이 늘어남.

- 참고로 r은 read, w는 write 권한임.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095011_uNwQISL3x298Fkthcd?q=80&s=1280x180&t=outside&f=webp)

- 다시 새롭게 OAuth 2.0 Access Token을 발급합니다.

    - 신청한 권한이 많아진 것을 확인할 수 있습니다. 모든 권한이 다 필요하진 않지만 저는 그냥 다 신청하였습니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095012_iNmmfuXdDYkPkyJ9S6?q=80&s=1280x180&t=outside&f=webp)

- Permissions Scope가 반영된 새로운 토큰으로 사용합니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095013_4UdOEgGUL8KP5Ri7J7?q=80&s=1280x180&t=outside&f=webp)

## 레퍼런스

- 데이터팝콘 회사 페이지 [https://www.linkedin.com/company/105004096/](https://www.linkedin.com/company/105004096/)

- 데이터팝콘 브랜드 페이지 [https://www.linkedin.com/showcase/105019977/](https://www.linkedin.com/showcase/105019977/)

- 

- 

- 3-lagged Oauth 방식.

    - 꽤나 복잡한 절차로 인증코드를 받아온다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095014_Mseez6mfd3eyACRSbm?q=80&s=1280x180&t=outside&f=webp)

- Standard로해서 아래 인증 내용을 넣습니다. 

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095014_yQokJTw1mFKeuAUrTL?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095015_0VNDV1cM5PljlYh0RO?q=80&s=1280x180&t=outside&f=webp)

- 허용을 해주고 나면 링크드인 포스팅이 가능해집니다.

    - `datapopcorn page - upload` 이런식으로 작성하고 실행하니 `urn:li:share:7260924359517614080`  결과가 나왔습니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095016_WC84mP5fZDVeBcFO88?q=80&s=1280x180&t=outside&f=webp)

- 실제 페이지에 가보니 아래와 같이 올바르게 잘 포스팅이 되었습니다.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095017_h5Bcj5cVX2JDddiI3x?q=80&s=1280x180&t=outside&f=webp)

[https://www.linkedin.com/posts/datapopcorn_datapopcorn-page-upload-activity-7260924360033476608-fV4I/?utm_source=share&utm_medium=member_desktop](https://www.linkedin.com/posts/datapopcorn_datapopcorn-page-upload-activity-7260924360033476608-fV4I/?utm_source=share&utm_medium=member_desktop)

- URL을 통한 이미지 업로드도 확인하였습니다. [https://www.linkedin.com/posts/datapopcorn_imaeg-upload-activity-7260926006151000064-BC87?utm_source=share&utm_medium=member_desktop](https://www.linkedin.com/posts/datapopcorn_imaeg-upload-activity-7260926006151000064-BC87?utm_source=share&utm_medium=member_desktop)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095017_8KLmXJaN01fuukzJlP?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095018_1OiZQ6Mbob4ZeRnbPn?q=80&s=1280x180&t=outside&f=webp)

- 7260926737541136384

    - [https://www.linkedin.com/posts/datapopcorn_n8n-title-activity-7260926738094792704-YDra?utm_source=share&utm_medium=member_desktop](https://www.linkedin.com/posts/datapopcorn_n8n-title-activity-7260926738094792704-YDra?utm_source=share&utm_medium=member_desktop)

    - 

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095019_ziJnoJS8LU0pfdX302?q=80&s=1280x180&t=outside&f=webp)

---

# 용어 정리

## URNs and IDs

- [URNs](http://www.ietf.org/rfc/rfc2141.txt) are used to represent foreign associations to an entity (persons, organizations, and so on) in an API. A URN is a string-based identifier with the format:

- `urn:{namespace}:{entityType}:{id}`

For example:

    - `urn:li:person:123` 

    - `urn:li:organization:456`

- URN와 ID의 차이.

![Image](https://upload.cafenono.com/image/slashpageHome/20250422/095019_LndlvsGT3nYAt8Rwly?q=80&s=1280x180&t=outside&f=webp)

For the site tree, see the [root Markdown](https://slashpage.com/n8n-guide.md).
