Hướng Dẫn Sử Dụng LinkedIn API: Tích Hợp Mạng Lưới Chuyên Nghiệp Toàn Diện (2026)

Ashley Innocent

Ashley Innocent

25 tháng 3 2026

Hướng Dẫn Sử Dụng LinkedIn API: Tích Hợp Mạng Lưới Chuyên Nghiệp Toàn Diện (2026)

Tóm tắt

API LinkedIn cho phép các nhà phát triển tích hợp với mạng lưới chuyên nghiệp của LinkedIn một cách lập trình. Nó sử dụng xác thực OAuth 2.0, các điểm cuối RESTful và GraphQL cho hồ sơ, bài đăng, bình luận, trang công ty và quảng cáo, với giới hạn tốc độ là 100-500 yêu cầu mỗi ngày cho mỗi ứng dụng. Hướng dẫn này bao gồm thiết lập xác thực, truy cập hồ sơ, đăng nội dung, quản lý trang công ty, API quảng cáo và các chiến lược tích hợp sản xuất.

Giới thiệu

LinkedIn có hơn 900 triệu người dùng chuyên nghiệp tại hơn 200 quốc gia. Đối với các nhà phát triển xây dựng công cụ tuyển dụng, nền tảng tiếp thị hoặc ứng dụng B2B, tích hợp API LinkedIn là điều cần thiết để tiếp cận đối tượng chuyên nghiệp này.

Thực tế là: các nhà tiếp thị B2B quản lý sự hiện diện trên LinkedIn thủ công mất 15-20 giờ mỗi tuần cho việc đăng bài, theo dõi tương tác và tạo khách hàng tiềm năng. Một tích hợp API LinkedIn vững chắc sẽ tự động hóa việc phân phối nội dung, thu thập khách hàng tiềm năng, phân tích tương tác và quy trình làm việc tuyển dụng.

Hướng dẫn này sẽ hướng dẫn bạn toàn bộ quá trình tích hợp API LinkedIn. Bạn sẽ tìm hiểu về xác thực OAuth 2.0, truy cập hồ sơ, đăng nội dung, quản lý trang công ty, tích hợp quảng cáo, webhook và các chiến lược triển khai sản xuất. Cuối cùng, bạn sẽ có một tích hợp LinkedIn sẵn sàng cho sản xuất.

💡
Apidog đơn giản hóa việc kiểm thử tích hợp API. Kiểm thử các điểm cuối LinkedIn của bạn, xác thực luồng OAuth, kiểm tra phản hồi API và gỡ lỗi các vấn đề về quyền trong một không gian làm việc. Nhập các đặc tả API, mô phỏng phản hồi và chia sẻ các kịch bản kiểm thử với nhóm của bạn.
button

API LinkedIn là gì?

LinkedIn cung cấp các API RESTful và GraphQL để truy cập dữ liệu mạng lưới chuyên nghiệp. API xử lý:

Các tính năng chính

Tính năng Mô tả
RESTful + GraphQL Nhiều kiểu API
OAuth 2.0 Yêu cầu ủy quyền người dùng
Giới hạn tốc độ 100-500 yêu cầu/ngày cho mỗi ứng dụng
Trang công ty Các hoạt động CRUD đầy đủ
API Quảng cáo Quản lý chiến dịch
Webhooks Thông báo thời gian thực
Tải lên phương tiện Hình ảnh và video

Sản phẩm API

API Cấp độ truy cập Trường hợp sử dụng
Đăng nhập bằng LinkedIn Công khai Xác thực người dùng
API Hồ sơ Đối tác Đọc hồ sơ người dùng
API Quản trị viên công ty Đối tác Quản lý trang công ty
API Quảng cáo Đối tác Quản lý chiến dịch quảng cáo
API Đăng tuyển việc làm Đối tác Đăng và quản lý việc làm
Nền tảng nhà phát triển tiếp thị Đối tác Truy cập API đầy đủ

Phiên bản API

Phiên bản Trạng thái Ngày kết thúc
v2 Hiện tại Đang hoạt động
v1 Đã ngừng hỗ trợ Tháng 12 năm 2023

Bắt đầu: Thiết lập xác thực

Bước 1: Tạo tài khoản nhà phát triển LinkedIn

Trước khi truy cập API:

  1. Truy cập Cổng thông tin nhà phát triển LinkedIn
  2. Đăng nhập bằng tài khoản LinkedIn
  3. Nhấp vào Tạo ứng dụng trong bảng điều khiển Ứng dụng của tôi
  4. Điền thông tin chi tiết ứng dụng (tên, logo, mô tả)

Bước 2: Cấu hình cài đặt ứng dụng

Thiết lập xác thực ứng dụng:

const LINKEDIN_CLIENT_ID = process.env.LINKEDIN_CLIENT_ID;
const LINKEDIN_CLIENT_SECRET = process.env.LINKEDIN_CLIENT_SECRET;
const LINKEDIN_REDIRECT_URI = process.env.LINKEDIN_REDIRECT_URI;

// Lấy các thông tin này từ bảng điều khiển ứng dụng của bạn
// https://www.linkedin.com/developers/apps/{appId}/auth

Bước 3: Yêu cầu quyền cần thiết

LinkedIn yêu cầu phê duyệt quyền:

Quyền Mô tả Yêu cầu phê duyệt
r_liteprofile Hồ sơ cơ bản (tên, ảnh) Tự động phê duyệt
r_emailaddress Địa chỉ email Tự động phê duyệt
w_member_social Đăng bài thay mặt người dùng Xác minh đối tác
r_basicprofile Hồ sơ đầy đủ Xác minh đối tác
r_organization_social Truy cập trang công ty Xác minh đối tác
w_organization_social Đăng bài lên trang công ty Xác minh đối tác
rw_ads Quản lý quảng cáo Xác minh đối tác
r_ads_reporting Phân tích quảng cáo Xác minh đối tác

Bước 4: Xây dựng URL ủy quyền

Triển khai luồng OAuth 2.0:

const getAuthUrl = (state, scopes = ['r_liteprofile', 'r_emailaddress']) => {
  const params = new URLSearchParams({
    response_type: 'code',
    client_id: LINKEDIN_CLIENT_ID,
    redirect_uri: LINKEDIN_REDIRECT_URI,
    scope: scopes.join(' '),
    state: state
  });

  return `https://www.linkedin.com/oauth/v2/authorization?${params.toString()}`;
};

// Cách sử dụng
const state = require('crypto').randomBytes(16).toString('hex');
const authUrl = getAuthUrl(state, ['r_liteprofile', 'r_emailaddress', 'w_member_social']);
console.log(`Chuyển hướng người dùng đến: ${authUrl}`);

Bước 5: Trao đổi mã để lấy mã truy cập (Access Token)

Xử lý callback OAuth:

const exchangeCodeForToken = async (code) => {
  const response = await fetch('https://www.linkedin.com/oauth/v2/accessToken', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'authorization_code',
      code: code,
      client_id: LINKEDIN_CLIENT_ID,
      client_secret: LINKEDIN_CLIENT_SECRET,
      redirect_uri: LINKEDIN_REDIRECT_URI
    })
  });

  const data = await response.json();

  return {
    accessToken: data.access_token,
    expiresIn: data.expires_in // 60 ngày
  };
};

// Xử lý callback
app.get('/oauth/callback', async (req, res) => {
  const { code, state } = req.query;

  try {
    const tokens = await exchangeCodeForToken(code);

    // Lưu trữ token một cách an toàn
    await db.users.update(req.session.userId, {
      linkedin_access_token: tokens.accessToken,
      linkedin_token_expires: Date.now() + (tokens.expiresIn * 1000)
    });

    res.redirect('/success');
  } catch (error) {
    console.error('Lỗi OAuth:', error);
    res.status(500).send('Xác thực thất bại');
  }
});

Bước 6: Làm mới mã truy cập (Access Token)

Mã truy cập hết hạn sau 60 ngày:

const refreshAccessToken = async (refreshToken) => {
  // Lưu ý: LinkedIn không cung cấp refresh token
  // Người dùng phải xác thực lại sau 60 ngày
  // Triển khai thông báo hết hạn
};

// Kiểm tra thời hạn token trước khi gọi API
const ensureValidToken = async (userId) => {
  const user = await db.users.findById(userId);

  if (user.linkedin_token_expires < Date.now() + 86400000) { // 24 giờ
    // Thông báo cho người dùng xác thực lại
    await notifyUserToReauth(user.id);
    throw new Error('Token đã hết hạn, vui lòng xác thực lại');
  }

  return user.linkedin_access_token;
};

Bước 7: Thực hiện các cuộc gọi API đã xác thực

Tạo ứng dụng khách API có thể tái sử dụng:

const LINKEDIN_BASE_URL = 'https://api.linkedin.com/v2';

const linkedinRequest = async (endpoint, options = {}) => {
  const accessToken = await ensureValidToken(options.userId);

  const response = await fetch(`${LINKEDIN_BASE_URL}${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json',
      'X-Restli-Protocol-Version': '2.0.0',
      ...options.headers
    }
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Lỗi API LinkedIn: ${error.message}`);
  }

  return response.json();
};

// Cách sử dụng
const profile = await linkedinRequest('/me');
console.log(`Xin chào, ${profile.localizedFirstName} ${profile.localizedLastName}`);

Truy cập Hồ sơ

Lấy hồ sơ người dùng

Lấy hồ sơ của người dùng đã xác thực:

const getUserProfile = async () => {
  const response = await linkedinRequest('/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))');
  return response;
};

// Cách sử dụng
const profile = await getUserProfile();

console.log(`Tên: ${profile.localizedFirstName} ${profile.localizedLastName}`);
console.log(`ID: ${profile.id}`);
console.log(`Ảnh: ${profile.profilePicture?.['displayImage~']?.elements?.[0]?.identifiers?.[0]?.identifier}`);

Lấy địa chỉ email

Lấy email người dùng:

const getUserEmail = async () => {
  const response = await linkedinRequest('/emailAddress?q=members&projection=(emailAddress*)');
  return response;
};

// Cách sử dụng
const email = await getUserEmail();
console.log(`Email: ${email.elements?.[0]?.emailAddress}`);

Các trường hồ sơ có sẵn

Trường Quyền Mô tả
id r_liteprofile ID thành viên LinkedIn
firstName r_liteprofile Tên
lastName r_liteprofile Họ
profilePicture r_liteprofile URL ảnh đại diện
headline r_basicprofile Tiêu đề chuyên môn
summary r_basicprofile Phần giới thiệu
positions r_basicprofile Lịch sử làm việc
educations r_basicprofile Lịch sử học vấn
emailAddress r_emailaddress Email chính

Đăng nội dung

Tạo bài đăng

Chia sẻ bài đăng văn bản lên bảng tin của người dùng:

const createPost = async (authorUrn, postContent) => {
  const response = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postContent.text
          },
          shareMediaCategory: 'NONE'
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return response;
};

// Cách sử dụng
const post = await createPost('urn:li:person:ABC123', {
  text: 'Vui mừng thông báo ra mắt sản phẩm mới của chúng tôi! 🚀 #đổi_mới #khởi_nghiệp'
});

console.log(`Bài đăng đã tạo: ${post.id}`);

Tạo bài đăng kèm hình ảnh

Chia sẻ bài đăng kèm phương tiện:

const createPostWithImage = async (authorUrn, postData) => {
  // Bước 1: Đăng ký tải lên phương tiện
  const uploadRegistration = await linkedinRequest('/assets?action=registerUpload', {
    method: 'POST',
    body: JSON.stringify({
      registerUploadRequest: {
        recipes: ['urn:li:digitalmediaRecipe:feedshare-image'],
        owner: authorUrn,
        serviceRelationships: [
          {
            relationshipType: 'OWNER',
            identifier: 'urn:li:userGeneratedContent'
          }
        ]
      }
    })
  });

  const uploadUrl = uploadRegistration.value.uploadMechanism['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest'].uploadUrl;
  const assetUrn = uploadRegistration.value.asset;

  // Bước 2: Tải hình ảnh lên URL được cung cấp
  await fetch(uploadUrl, {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ' + await getAccessToken(),
      'Content-Type': 'application/octet-stream'
    },
    body: postData.imageBuffer
  });

  // Bước 3: Tạo bài đăng với hình ảnh đã tải lên
  const post = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postData.text
          },
          shareMediaCategory: 'IMAGE',
          media: [
            {
              status: 'READY',
              description: {
                text: postData.imageDescription || ''
              },
              media: assetUrn,
              title: {
                text: postData.title || ''
              }
            }
          ]
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return post;
};

Tạo bài đăng kèm video

Chia sẻ nội dung video:

const createPostWithVideo = async (authorUrn, postData) => {
  // Đăng ký tải lên video
  const uploadRegistration = await linkedinRequest('/assets?action=registerUpload', {
    method: 'POST',
    body: JSON.stringify({
      registerUploadRequest: {
        recipes: ['urn:li:digitalmediaRecipe:feedshare-video'],
        owner: authorUrn,
        serviceRelationships: [
          {
            relationshipType: 'OWNER',
            identifier: 'urn:li:userGeneratedContent'
          }
        ]
      }
    })
  });

  const assetUrn = uploadRegistration.value.asset;

  // Tải lên video (sử dụng URL tải lên đã được ký trước từ phản hồi)
  // ... logic tải lên ...

  // Tạo bài đăng
  const post = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: authorUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: { text: postData.text },
          shareMediaCategory: 'VIDEO',
          media: [{ status: 'READY', media: assetUrn }]
        }
      },
      visibility: { 'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC' }
    })
  });

  return post;
};

Thông số kỹ thuật phương tiện

Loại phương tiện Định dạng Kích thước tối đa Thời lượng
Hình ảnh JPG, PNG, GIF 8MB Không áp dụng
Video MP4, MOV 5GB Tối đa 15 phút
Tài liệu PDF, PPT, DOC 100MB Không áp dụng

Quản lý trang công ty

Lấy thông tin công ty

Lấy thông tin chi tiết trang công ty:

const getCompanyInfo = async (companyId) => {
  const response = await linkedinRequest(
    `/organizations/${companyId}?projection=(id,localizedName,vanityName,tagline,description,universalName,logoV2(original~:playableStreams),companyType,companyPageUrl,confirmedLocations,industries,followerCount,staffCountRange,website, specialties)`
  );
  return response;
};

// Cách sử dụng
const company = await getCompanyInfo('1234567');
console.log(`Công ty: ${company.localizedName}`);
console.log(`Người theo dõi: ${company.followerCount}`);
console.log(`Trang web: ${company.website}`);

Đăng bài lên trang công ty

Chia sẻ cập nhật lên trang công ty:

const createCompanyPost = async (organizationUrn, postContent) => {
  const response = await linkedinRequest('/ugcPosts', {
    method: 'POST',
    body: JSON.stringify({
      author: organizationUrn,
      lifecycleState: 'PUBLISHED',
      specificContent: {
        'com.linkedin.ugc.ShareContent': {
          shareCommentary: {
            text: postContent.text
          },
          shareMediaCategory: postContent.media ? 'IMAGE' : 'NONE',
          media: postContent.media ? [
            {
              status: 'READY',
              media: postContent.media.assetUrn
            }
          ] : []
        }
      },
      visibility: {
        'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
      }
    })
  });

  return response;
};

// Cách sử dụng
const post = await createCompanyPost('urn:li:organization:1234567', {
  text: 'Chúng tôi đang tuyển dụng! Hãy tham gia đội ngũ đang phát triển của chúng tôi. #nghe_nghiep #tuyen_dung'
});

Lấy số lượng người theo dõi công ty

Lấy số lượng người theo dõi:

const getFollowerCount = async (organizationId) => {
  const response = await linkedinRequest(
    `/organizationalEntityFollowerStatistics?q=organizationalEntity&organizationalEntity=urn:li:organization:${organizationId}`
  );
  return response;
};

Giới hạn tốc độ

Tìm hiểu giới hạn tốc độ

LinkedIn áp dụng giới hạn tốc độ cho mỗi ứng dụng:

API Giới hạn Khung thời gian
API Hồ sơ 100 yêu cầu Mỗi ngày
Bài đăng UGC 50 bài đăng Mỗi ngày
Quản trị viên công ty 500 yêu cầu Mỗi ngày
API Quảng cáo 100 yêu cầu Mỗi phút

Header giới hạn tốc độ

Header Mô tả
X-Restli-Quota-Remaining Số yêu cầu còn lại
X-Restli-Quota-Reset Số giây cho đến khi đặt lại

Khắc phục các vấn đề thường gặp

Vấn đề: Lỗi 401 Unauthorized (Không được ủy quyền)

Giải pháp:

  1. Xác minh mã truy cập chưa hết hạn (60 ngày)
  2. Kiểm tra phạm vi token có bao gồm tài nguyên được yêu cầu
  3. Đảm bảo có header Authorization: Bearer {token}

Vấn đề: Lỗi 403 Forbidden (Bị cấm)

Giải pháp:

  1. Xác minh ứng dụng có các quyền cần thiết
  2. Kiểm tra người dùng đã phê duyệt các phạm vi được yêu cầu
  3. Có thể yêu cầu xác minh đối tác

Vấn đề: Lỗi 429 Rate Limited (Vượt quá giới hạn tốc độ)

Giải pháp:

  1. Triển khai hàng đợi yêu cầu
  2. Lưu bộ nhớ cache phản hồi để giảm số lần gọi
  3. Sử dụng webhook thay vì thăm dò

Danh sách kiểm tra triển khai sản xuất

Trước khi đưa vào hoạt động:

Các trường hợp sử dụng thực tế

Nền tảng tuyển dụng

Một công cụ tuyển dụng tự động hóa việc đăng tuyển việc làm:

Tự động hóa tiếp thị B2B

Một nền tảng tiếp thị lên lịch nội dung LinkedIn:

Kết luận

API LinkedIn cung cấp quyền truy cập toàn diện vào các tính năng mạng lưới chuyên nghiệp. Những điểm chính cần nhớ:

button

Phần Câu hỏi thường gặp

Làm cách nào để truy cập API LinkedIn?

Tạo tài khoản Nhà phát triển LinkedIn, tạo một ứng dụng và hoàn tất xác minh Đối tác để có quyền truy cập API nâng cao.

Tôi có thể đăng bài tự động lên LinkedIn không?

Có, hãy sử dụng API UGC (Nội dung do người dùng tạo) với quyền w_member_social cho bài đăng cá nhân hoặc w_organization_social cho bài đăng công ty.

Giới hạn tốc độ của LinkedIn là gì?

Giới hạn tốc độ dao động từ 100-500 yêu cầu mỗi ngày tùy thuộc vào API. API Quảng cáo cho phép 100 yêu cầu mỗi phút.

Token LinkedIn có hiệu lực trong bao lâu?

Mã truy cập hết hạn sau 60 ngày. Người dùng phải xác thực lại để tiếp tục truy cập API.

Tôi có thể truy cập danh bạ của người dùng không?

Không, LinkedIn đã loại bỏ quyền truy cập API danh bạ đối với hầu hết các ứng dụng do thay đổi về quyền riêng tư.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API