This document describes how to integrate Kakao Story APIs into your service with a REST API.
You can test the features described in this document in [Tools] > [REST API Test].
Method | URL | Authorization |
---|---|---|
GET |
https://kapi.kakao.com/v1/api/story/isstoryuser |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | - |
This API checks if the user who is currently logged in is using Kakao Story.
Include the access token in the request header, and send a GET
request.
If the request is successful, the API returns isStoryUser
in JSON format. If its value is true
, the user is using Kakao Story. If the user is not using Kakao Story, false
is returned so that you can take action to prevent an error that occurs when calling Kakao Story APIs for the user.
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
isStoryUser | Boolean |
Whether to use Kakao Story. If true , the currently logged-in user is a Kakao Story user. |
O |
curl -v -X GET "https://kapi.kakao.com/v1/api/story/isstoryuser" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"isStoryUser":true
}
Method | URL | Authorization |
---|---|---|
GET |
https://kapi.kakao.com/v1/api/story/profile |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Profile Info(nickname/profile image) Nickname Profile image |
This API enables you to retrieve the Kakao Story profile information of the user who is currently logged in.
The user's profile data returned in response to this API may differ depending on a user's consent. To check the required user consent for each data, refer to the Response table below.
Users can set their desired profile nicknames and images for Kakao Story, Kakao Talk, and Kakao Account respectively. Thus, profile information retrieved through this API is different from the ones obtained through the Retrieving user information or Retrieving Kakao Talk profile API.
Include the access token in the request header, and send a GET
request. If the request is successful, the Kakao Story profile information is returned in JSON format.
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
nickName | String |
Kakao Story nickname. Required user consent: Profile Info(nickname/profile image) or Nickname |
X |
profileImageUrl | String |
Kakao Story profile image URL with a size of 480x480 pixels to 1024x1024 pixels. Required user consent: Profile Info(nickname/profile image) or Profile image |
X |
thumbnailUrl | String |
Kakao Story thumbnail profile image URL with a size of 160x213 pixels. Image size can be changed within the range of 160x213 pixels. Required user consent: Profile Info(nickname/profile image) or Profile image |
X |
bgImageURL | String |
Kakao Story background image URL with a size of 480x480 pixels to 1024x1024 pixels. Required user consent: Profile Info(nickname/profile image) or Profile image |
X |
permalink | String |
Kakao Story profile URL. Required user consent: KakaoStory profile URL NOTE: From June 1, 2021, only when a user consents to 'KakaoStory profile URL(story_permalink)', the Retrieving Kakao Story profile API returns 'permalink' in the response. For more details, see Notice. |
X |
birthday | String |
Birthday registered in Kakao Story in MMdd format. Required user consent: Birthday |
X |
birthdayType | String |
Solar or Lunar birthday.SOLAR or LUNAR Required user consent: Birthday |
X |
From June 25, 2021, we provide the profile information separated as 'Nickname' and 'Profile image'. You can request consent to desired profile information by setting desired scopes respectively. If you create a new app, the separated scopes for profile information are applied to the app. If you have enabled the 'Profile Info(nickname/profile image)' scope, you can continue to use that scope. In this case, you do not need to change the app settings, and there is no change in API response. But if you want to use the new scpes in the existing app, fill out the request form. In this case, the API response may change. Refer to Notice for more details.
curl -v -X GET "https://kapi.kakao.com/v1/api/story/profile" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"nickName":"Ryan",
"profileImageURL":"https://xxx.kakao.com/.../aaa.jpeg",
"thumbnailURL":"https://xxx.kakao.com/.../bbb.jpeg",
"bgImageURL":"https://xxx.kakao.co.kr/.../ccc.jpg"
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"nickName":"Ryan"
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"profileImageURL":"https://xxx.kakao.com/.../aaa.jpeg",
"thumbnailURL":"https://xxx.kakao.com/.../bbb.jpeg",
"bgImageURL":"https://xxx.kakao.co.kr/.../ccc.jpg"
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"nickName":"Ryan",
"profileImageURL":"https://xxx.kakao.com/.../aaa.jpeg",
"thumbnailURL":"https://xxx.kakao.com/.../bbb.jpeg",
"bgImageURL":"https://xxx.kakao.co.kr/.../ccc.jpg",
"birthday":"1231",
"birthdayType":"SOLAR"
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"permalink": "https://story.kakao.com/XXXXX"
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{}
HTTP/1.1 400 Bad Request
{
"msg": "NotExistStoryUserException",
"code": -601
}
This API enables you to post a new story on Kakao Story of the user who is currently logged in. This API supports three types of stories — text, photo, and link. Make sure that depending on the story types, the request parameters are different.
To post a photo story, you must get the required value using the Uploading image API in advance. For a link story, get the required value using the Scraping web page API in advance. After that, use the value obtained through each API as it is when you request to write a photo or link story. If not, an error occurs.
If the request is successful, the created story ID is returned with the HTTP status code 200.
The execution URL works only when each platform is registered in [My Application] > [Platform]. Also, if the open market or App Store URL is not specified, the [Go to the App] button does not work. To see how to register platforms, refer to Register platforms. The default URL format you can refer is as follows: Execution URL: kakao${NATIVE_APP_KEY}://kakaostory Android Market URL: market://details?id=${ANDROID_PACKAGE_NAME}] iOS Market URL: https://itunes.apple.com/app/${APP_STORE_ID}
Type | Description |
---|---|
Text | Story with text only. |
Photo | Story with text and photos. |
Link | Story with text and the information obtained by scrapping a web page. |
Method | URL | Authorization |
---|---|---|
POST |
https://kapi.kakao.com/v1/api/story/post/note |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Publish posts in KakaoStory |
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Content-Type | Content-Type: application/x-www-form-urlencoded;charset=utf-8 The data type of the request. |
O |
Name | Type | Description | Required |
---|---|---|---|
permission | String |
Audience for the story. One of F (Friends only), A (Public), and M (Private). (Default: A ) |
X |
enable_share | Boolean |
Whether to share the story when permission is set to F (Friends only).(Default: false ) |
X |
android_exec_param | String |
Parameter to be added to the URL to execute an Android app when selecting the [View on app] button from Kakao Story. | X |
ios_exec_param | String |
Parameter to be added to the URL to execute an iOS app when selecting the [View on app] button from Kakao Story. | X |
android_market_param | String |
Parameter to be added to the execution URL when redirecting to an open market from Kakao Story. | X |
ios_market_param | String |
Parameter to be added to the execution URL when redirecting to the App Store from Kakao Story. | X |
content | String |
Text to be input in the story. Up to 2048 characters are allowed. |
O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
ID of the uploaded story. | O |
curl -v -X POST "https://kapi.kakao.com/v1/api/story/post/note" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
--data-urlencode "content=This cafe is really awesome\!" \
--data-urlencode "android_exec_param=cafe_id=1234" \
--data-urlencode "ios_exec_param=cafe_id=1234"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"id":"AAAAAAA.BBBBBBBBBBB"
}
Method | URL | Authorization |
---|---|---|
POST |
https://kapi.kakao.com/v1/api/story/post/photo |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Publish posts in KakaoStory |
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Content-Type | Content-Type: application/x-www-form-urlencoded;charset=utf-8 The data type of the request. |
O |
Name | Type | Description | Required |
---|---|---|---|
permission | String |
Audience for the story. One of F (Friends only), A (Public), and M (Private). (Default: A ) |
X |
enable_share | Boolean |
Whether to share the story when permission is set to F (Friends only).(Default: false ) |
X |
android_exec_param | String |
Parameter to be added to the URL to execute an Android app when selecting the [View on app] button from Kakao Story. | X |
ios_exec_param | String |
Parameter to be added to the URL to execute an iOS app when selecting the [View on app] button from Kakao Story. | X |
android_market_param | String |
Parameter to be added to the execution URL when redirecting to an open market from Kakao Story. | X |
ios_market_param | String |
Parameter to be added to the execution URL when redirecting to the App Store from Kakao Story. | X |
content | String |
Text to be input in the story. Up to 2048 characters are allowed. |
X |
image_url_list | String[] |
The path, width and height of the uploaded image obtained through the Uploading image API. | O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
ID of the uploaded story. | O |
curl -v -X POST "https://kapi.kakao.com/v1/api/story/post/photo" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "permission=F" \
-d "enable_share=true" \
--data-urlencode "content=This cafe is really awesome\!" \
--data-urlencode "image_url_list=['/aaa/bbb/img1.jpg?width=6200&height=3100','/aaa/ddd/img2.jpg?width=6200&height=3100']"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"id":"AAAAAAA.BBBBBBBBBBB"
}
Method | URL | Authorization |
---|---|---|
POST |
https://kapi.kakao.com/v1/api/story/post/link |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Publish posts in KakaoStory |
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Content-Type | Content-Type: application/x-www-form-urlencoded;charset=utf-8 The data type of the request. |
O |
Name | Type | Description | Required |
---|---|---|---|
permission | String |
Audience for the story. One of F (Friends only), A (Public), and M (Private). (Default: A ) |
X |
enable_share | Boolean |
Whether to share the story when permission is set to F (Friends only).(Default: false ) |
X |
android_exec_param | String |
Parameter to be added to the URL to execute an Android app when selecting the [View on app] button from Kakao Story. | X |
ios_exec_param | String |
Parameter to be added to the URL to execute an iOS app when selecting the [View on app] button from Kakao Story. | X |
android_market_param | String |
Parameter to be added to the execution URL when redirecting to an open market from Kakao Story. | X |
ios_market_param | String |
Parameter to be added to the execution URL when redirecting to the App Store from Kakao Story. | X |
content | String |
Text to be input in the story. Up to 2048 characters are allowed. |
X |
link_info | LinkInfo |
The web page information that is obtained through the Scraping web page API. | O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
ID of the uploaded story. | O |
curl -v -X POST "https://kapi.kakao.com/v1/api/story/post/link" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
--data-urlencode 'link_info={
"url":"https://developers.kakao.com/",
"requested_url":"http://bit.ly/1wwLqDl",
"host":"developers.kakao.com",
"title":"Kakao Developers_",
"image":["http://dn-l1-story.kakao.co.kr/dn/bc995u/hydnh8wbKi/dz59YCCjyZSXNmDgTPpPa0/img.jpg?height=630&width=1200"],
"description":"더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다.",
"section":"",
"type":"website"
}' \
--data-urlencode "content=better than expected!\"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"id":"AAAAAAA.BBBBBBBBBBB"
}
This API enables you to retrieve story information on Kakao Story of the user currently logged in. You can request basic information about the multiple recent stories or a specific story only by specifying a story ID. When requesting a specific story, you can get detailed information about the story, including comments.
You can use this API in either way:
Depending on whether you request a single story or multiple stories, the request parameters you need to pass are different. If you want to request to get the specified story, you must pass id
of the story. In this case, the response includes the contents and the comments of the story.
On the other hand, when requesting multiple stories, you do not need to pass id
in the request. In this case, the response includes only the number of comments and likes. To get information of the recent stories from a specific story, pass last_id
.
If the request is successful, the story information is returned in JSON format.
Method | URL | Authorization |
---|---|---|
GET |
https://kapi.kakao.com/v1/api/story/mystory |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Read access to KakaoStory posts |
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
Story ID to be retrieved. | O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
Story ID. | O |
url | String |
Story URL. | O |
media_type | String |
Story type. One of PHOTO (photo), NOTE (text), NOT_SUPPORTED (not supported). |
X |
media | StoryMedia[] |
URLs by image size. Only returned if media_type is PHOTO . |
X |
created_at | Datetime |
The time when the story is posted in RFC3339 internet date/time format. | O |
comment_count | Integer |
Number of comments. | O |
like_count | Integer |
Number of moods that the user's friends left. | O |
content | String |
Story content. | X |
comments | StoryComments[] |
List of comments consisting of text (content) and writer (the user who left the comment).* Not supported in the Retrieving multiple stories API. |
X |
likes | StoryLikes[] |
List of moods consisting of emotion (mood emoji) and actor (the user who left the mood).* Not supported in the Retrieving multiple stories API. |
X |
permission | String |
Audience for the story. - PUBLIC : Open to all.- FRIEND : Open to only friends.- ONLY_ME : Open to only me (Private). (Default: PUBLIC ) |
X |
Name | Type | Description | Required |
---|---|---|---|
text | String |
Comment content. | O |
writer | StoryActor |
User who left a comment. Consists of display_name (user's Kakao Story nickname) and profile_thumbnail_url (user's Kakao Story profile thumbnail URL). |
O |
Name | Type | Description | Required |
---|---|---|---|
emotion | String |
Mood left in a story. One of LIKE , COOL , HAPPY , SAD , CHEER_UP , NOT_DEFINED . |
O |
actor | StoryActor |
User who left the mood. Consists of display_name (user's Kakao Story nickname) and profile_thumbnail_url (user's Kakao Story profile thumbnail URL). |
O |
curl -v -G GET "https://kapi.kakao.com/v1/api/story/mystory" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "id=${STORY_ID}"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"id": "AAAAAAA.CCCCCCCCCCC",
"url": "http://story-web.kakao.com/AAAAAAA/CCCCCCCCCCC",
"media_type": "PHOTO",
"created_at": "2014-06-13T07:58:20Z",
"comment_count": 1,
"like_count": 1,
"content": "This cafe is really awesome!",
"media": [
{
"original":"http://xxx.kakao.co.kr/.../img.png?width=150&height=150",
"xlarge":"http://xxx.kakao.co.kr/.../img_xl.jpg?width=150&height=150",
"large":"http://xxx.kakao.co.kr/.../img_l.jpg?width=150&height=150",
"medium":"http://xxx.kakao.co.kr/.../img_m.jpg?width=150&height=150",
"small":"http://xxx.kakao.co.kr/.../img_s.jpg?width=150&height=150"
}
],
"comments": [
{
"text": "여기 위치가 어디?",
"writer": {
"display_name": "한여름",
"profile_thumbnail_url": "http://xxxx.kakao.co.kr/.../ABCDEFG.jpeg"
}
}
],
"likes": [
{
"emotion": "COOL",
"actor": {
"display_name": "여바다",
"profile_thumbnail_url": "http://xxxx.kakao.co.kr/.../1234566.jpeg"
}
}
]
}
Method | URL | Authorization |
---|---|---|
GET |
https://kapi.kakao.com/v1/api/story/mystories |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Read access to KakaoStory posts |
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
last_id | String |
Set the last (latest) story ID among the stories that you want to retrieve. The stories from the specified story to the oldest stories are returned, excluding the specified story ID. If not specified, all stories from recent to oldest are returned, which is set as a default. |
X |
Name | Type | Description | Required |
---|---|---|---|
id | String |
Story ID. | O |
url | String |
Story URL. | O |
media_type | String |
Story type. One of PHOTO (photo), NOTE (text), NOT_SUPPORTED (not supported). |
X |
media | StoryMedia[] |
URLs by image size. Only returned if media_type is PHOTO . |
X |
created_at | Datetime |
The time when the story is posted in RFC3339 internet date/time format. | O |
comment_count | Integer |
Number of comments. | O |
like_count | Integer |
Number of moods that the user's friends left. | O |
content | String |
Story content. | X |
permission | String |
Audience for the story. - PUBLIC : Open to all.- FRIEND : Open to only friends.- ONLY_ME : Open to only me (Private). (Default: PUBLIC ) |
X |
curl -v -G GET "https://kapi.kakao.com/v1/api/story/mystories" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-d "last_id={STORY_ID}"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
[
{
"id": "AAAAAAA.BBBBBBBBBBB",
"url": "http://story-web.kakao.com/AAAAAAA/BBBBBBBBBBB",
"media_type": "NOT_SUPPORTED",
"created_at": "2014-06-13T07:58:26Z",
"comment_count": 3,
"like_count": 4,
"content": "better than expected!"
},
{
"id": "AAAAAAA.CCCCCCCCCCC",
"url": "http://story-web.kakao.com/AAAAAAA/CCCCCCCCCCC",
"media_type": "PHOTO",
"created_at": "2014-06-13T07:58:20Z",
"comment_count": 1,
"like_count": 1,
"content": "This cafe is really awesome!",
"media": [
{
"original":"http://xxx.kakao.com/.../img.png?width=150&height=150",
"xlarge":"http://xxx.kakao.com/.../img_xl.jpg?width=150&height=150",
"large":"http://xxx.kakao.com/.../img_l.jpg?width=150&height=150",
"medium":"http://xxx.kakao.com/.../img_m.jpg?width=150&height=150",
"small":"http://xxx.kakao.com/.../img_s.jpg?width=150&height=150"
}
]
},
{
"id": "AAAAAAA.DDDDDDDDD",
"url": "http://story-web.kakao.com/AAAAAAA/DDDDDDDDD",
"media_type": "NOTE",
"created_at": "2014-06-13T07:58:17Z",
"comment_count": 0,
"like_count": 10,
"content": "A Rainbow - William Wordsworth\n\n..."
},
...
]
Method | URL | Authorization |
---|---|---|
DELETE |
https://kapi.kakao.com/v1/api/story/delete/mystory |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | Required: Read access to KakaoStory posts |
This API enables you to delete a story on Kakao Story by specifying a story ID.
Include the access token in the request header and the story ID to be deleted as a query string, and send a DELETE
request.
If the request is successful, the API returns the HTTP status code 200 only without the response body.
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
id | String |
Story ID to be deleted. | O |
curl -v -X DELETE "https://kapi.kakao.com/v1/api/story/delete/mystory?id={STORY_ID}" \
-H "Authorization: Bearer ${ACCESS_TOKEN}"
HTTP/1.1 200 OK
Content-Length: 0
Content-type: application/json;charset=UTF-8
Method | URL | Authorization |
---|---|---|
POST |
https://kapi.kakao.com/v1/api/story/upload/multi |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | - |
Before posting a photo story, you must upload an image file in advance and get the uploaded image URI value. With the uploading image function, you can upload an image to the Kakao platform and use the path where the image is uploaded when you request to post a photo story.
When it comes to the image to be uploaded, its size must be less than 10 MB, and you cannot upload more than 10 images. If the image file type is a GIF file, you can only upload a single image.
When you send a POST
request, include the access token in the request header and the binary of the file to be uploaded in the file
field.
If the request is successful, the API returns the path, width, and height of the uploaded image in the response body. You must use the same values obtained through this API when you request to post a photo story.
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Content-Type | multipart/form-data; boundary=---------------------------012345678901234567890123456 The data type of the request. |
O |
Name | Type | Description | Required |
---|---|---|---|
file | binary[] |
File binary to upload, including filename in Content-Disposition. | O |
The file name must start with 'file' and comply with the Multipart standard. Examples: file[0], file[1], file1
Name | Type | Description | Required |
---|---|---|---|
path | String |
Path, width and height of the uploaded image. | O |
---------------------------012345678901234567890123456
Content-Disposition: form-data; name="file"; filename="your_image.jpg"
Content-Type: image/jpeg
...
---------------------------012345678901234567890123456
curl -v -X POST "https://kapi.kakao.com/v1/api/story/upload/multi" \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-F "file=@/aaaa/bbbb/cccc/0.jpg" \
-F "file=@/aaaa/bbbb/dddd/0.jpg"
<?php
$uploadfile1="your_example_image_1.jpg";
$uploadfile2="your_example_image_2.jpg";
$ch = curl_init("https://kapi.kakao.com/v1/api/story/upload/multi");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ${ACCESS_TOKEN}"));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file[0]'=>"@$uploadfile1", 'file[1]'=>"@$uploadfile2"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$postResult = curl_exec($ch);
curl_close($ch);
print "$postResult";
?>
import requests
upload_photo_url = 'https://kapi.kakao.com/v1/api/story/upload/multi'
post_photo_url = 'https://kapi.kakao.com/v1/api/story/post/photo'
files = {'file': open('your_picture.jpeg', 'rb')}
token = 'YOUR TOKEN HERE'
headers = {'Authorization': 'Bearer {0}'.format(token)}
upload_result = requests.post(upload_photo_url, headers=headers, files=files)
post_photo_payload = {'image_url_list': upload_result.text}
post_result = requests.post(post_photo_url, headers=headers, data=post_photo_payload)
print post_result
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
public class MultiUploadTest {
private final static String STORY_UPLOAD_MULTI_URL
= "https://kapi.kakao.com/v1/api/story/upload/multi";
private final static String ACCESS_TOKEN = "[ACCESS_TOKEN]";
public static void main(String[] args) {
String uploadedImageUrlList = uploadMulti(
new File[]{
new File("/root/sample1.png"),
new File("/root/sample2.png")
});
System.out.println(uploadedImageUrlList);
// result
// [
// "/M9qi0/hygv5qpDce/jQiFgjJYUWkXoskTO8m8F0/img.png?width=160&height=160",
// "/cpYIJ1/hygwaZyfQl/4PjHIHrS1SlwmZWd17Vje0/img.png?width=314&height=306"
// ]
}
public static String uploadMulti(File[] files) {
if (files.length == 0)
return null;
String CRLF = "\r\n";
String TWO_HYPHENS = "--";
String BOUNDARY = "---------------------------012345678901234567890123456";
HttpsURLConnection conn = null;
DataOutputStream dos = null;
FileInputStream fis = null;
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int MAX_BUFFER_SIZE = 1 * 1024 * 1024;
// Request
try {
URL url = new URL(STORY_UPLOAD_MULTI_URL);
conn = (HttpsURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" +
BOUNDARY);
conn.setRequestProperty("Authorization", "Bearer " + ACCESS_TOKEN);
conn.setRequestProperty("Cache-Control", "no-cache");
dos = new DataOutputStream(conn.getOutputStream());
for (File f : files) {
dos.writeBytes(TWO_HYPHENS + BOUNDARY + CRLF);
dos.writeBytes("Content-Disposition: form-data; name=\"file\";" +
" filename=\"" + f.getName() + "\"" + CRLF);
dos.writeBytes(CRLF);
fis = new FileInputStream(f);
bytesAvailable = fis.available();
bufferSize = Math.min(bytesAvailable, MAX_BUFFER_SIZE);
buffer = new byte[bufferSize];
bytesRead = fis.read(buffer, 0, bufferSize);
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fis.available();
bufferSize = Math.min(bytesAvailable, MAX_BUFFER_SIZE);
bytesRead = fis.read(buffer, 0, bufferSize);
}
dos.writeBytes(CRLF);
}
// finish delimiter
dos.writeBytes(TWO_HYPHENS + BOUNDARY + TWO_HYPHENS + CRLF);
fis.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
if (fis != null) try { fis.close(); } catch (IOException ignore) { }
if (dos != null) try { dos.close(); } catch (IOException ignore) { }
}
// Response
InputStream inputStream = null;
BufferedReader reader = null;
try {
inputStream = new BufferedInputStream(conn.getInputStream());
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder builder = new StringBuilder();
while ((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
reader.close();
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try { reader.close(); } catch (IOException ignore) {}
}
if (inputStream != null) {
try { inputStream.close(); } catch (IOException ignore) {}
}
conn.disconnect();
}
return null;
}
}
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
[
"/aaaaa/bBbbbBbbbB/CCcCcC1ccCCcCCCCCCcc1c/img.png?width=150&height=150",
"/aaaaaa/bBbbbbbBbBb/dDdDDDDDddddDdddddDDDDDd/img.jpg?width=1080&height=1920"
]
Method | URL | Authorization |
---|---|---|
GET |
https://kapi.kakao.com/v1/api/story/linkinfo |
Access token |
Permission | Prerequisite | Kakao Login | User consent |
---|---|---|---|
- | Register platforms Activate Kakao Login Manage consent items |
Required | - |
Before posting a link story, you must scrape a web page in advance and get the URL of the web page. The web page is scraped based on the Open Graph Protocol. You must not pass an arbitrary URL to post a link story.
Send a GET
request with the URL to be scraped.
If the request is successful, the API returns the information of the scraped web page in JSON format.
Name | Description | Required |
---|---|---|
Authorization | Authorization: Bearer ${ACCESS_TOKEN} Access token as a type of user authentication. |
O |
Name | Type | Description | Required |
---|---|---|---|
url | String |
URL of the web page to be scraped. | O |
Name | Type | Description | Required |
---|---|---|---|
url | String |
URL of the scraped web page. If a short URL is used for url in the request, the actual URL is passed. |
X |
requested_url | String |
URL passed when requesting to scrape a web page. | X |
host | String |
URL Host. | X |
title | String |
Web page title. | X |
image | String[] |
URL of a representative image of the web page. Up to three images are allowed. |
X |
description | String |
Web page description. | X |
section | String |
Section information on a web page. | X |
type | String |
Type of content included on the web page such as "website", "video", and "music". | X |
curl -v -G GET "https://kapi.kakao.com/v1/api/story/linkinfo" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
--data-urlencode "url=http://bit.ly/1wwLqDl"
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"url":"https://developers.kakao.com/",
"requested_url":"http://bit.ly/1wwLqDl",
"host":"developers.kakao.com",
"title":"Kakao Developers",
"image":["http://dn-l1-story.kakao.co.kr/dn/bc995u/hydnh8wbKi/dz59YCCjyZSXNmDgTPpPa0/img.jpg?height=630&width=1200"],
"description":"Kakao respects creative developers who are willing to venture out and add value to the technology. We hope to make the world a better place through creativity and innovation, allowing exclusive and easy access to our technology and services.",
"section":"",
"type":"website"
}