JSON now accepted for Web API write methods

Published:Friday, October 27, 2017Updated:Monday, October 30, 2017

Incoming webhooks can do it. Slash commands and interactive messages speak it fluently. The message builder knows no other format. But, until now, chat.postMessage stubbornly refused to understand your messages composed in impeccable JSON.

Finally, Slack allows you to send JSON to a wide selection of write-based Web API methods. Additionally, now you can better separate concerns when presenting your credentials to Slack.

What's changing?

A large selection of Web API write methods now support properly formatted JSON POST bodies. This is most useful for methods supporting complex JSON parameters like chat.postMessage, chat.postEphemeral, chat.update, chat.unfurl, and dialog.open.

Mostly things should "just work." If you run into a situation where a method doesn't understand what seems like valid JSON — especially methods that take arrays or objects — please let us know!

Additionally, we now support and prefer passing tokens in HTTP Authorization headers.

How do I use it?

First we'll review how to use an Authorization header to transmit your OAuth credentials. You may already be familiar with this process if you've used other APIs or even our Files API.

Then we'll cover submitting JSON in the Web API, which depends on this authorization knowledge.

Using Authorization headers to signal your tokens

We now strongly encourage using the Authorization HTTP header to convey your app or integration's tokens.

To make use of sending JSON on write operations, you must provide your token value using an Authorization HTTP header.

Tokens used in the Slack API are bearer tokens. To specify this type of token to Slack, you must pre-pend Bearer to your HTTP Authorization header's value.

If your authorization token was a bot user token like xoxb-1234-56789abcdefghjijklmnop, then your Authorization header value would be Bearer xoxb-1234-56789abcdefghjijklmnop.

Best practice:

GET /api/users.info?user=W123456
Authorization: Bearer xoxb-1234-56789abcdefghijklmnop

Still accepted, but discouraged:

GET /api/users.info?user=W123456&token=xoxb-1234-56789abcdefghijklmnop

You can send your token via Authorization header using all Web API methods. Just don't send it multiple ways at once!

Here's an example using the popular command line tool, cURL:

curl example
curl -X GET -H 'Authorization: Bearer xoxb-1234-56789abcdefghijklmnop' \
https://slack.com/api/users.info?user=W123456

Sending JSON when POSTing to Web API write methods

To send JSON to the Web API, use the authorization procedure above: present your bearer tokens, whatever their token type, in a HTTP Authorization header.

Additionally specify the Content-type header as application/json. Your POST body should contain nothing but your JSON body.

Methods supporting comma-separated value arguments should support presentation of arguments as a JSON array or as a string with comma-separated values.

Methods accepting JSON objects or arrays, like chat.postMessage and chat.unfurl, should support presenting those arguments natively in JSON.

The most common use case for sending JSON is preserving your message structure when using multiple platform tools together: incoming webhooks, slash commands, interactive messages, chat.postMessage, etc.

Don't send a mixture of query parameters, POST parameters, or JSON attributes. Choose one model per request.

Example JSON requests

Creating a public channel with conversations.create:

POST /api/conversations.create
Content-type: application/json
Authorization: Bearer xoxa-xxxxxxxxx-xxxx
{"name":"something-urgent"}

Posting a message with menus using chat.postMessage:

POST /api/chat.postMessage
Content-type: application/json
Authorization: Bearer xoxa-xxxxxxxxx-xxxx
{"channel":"C061EG9SL","text":"I hope the tour went well, Mr. Wonka.","attachments":[{"text":"Who wins the lifetime supply of chocolate?","fallback":"You could be telling the computer exactly what it can do with a lifetime supply of chocolate.","color":"#3AA3E3","attachment_type":"default","callback_id":"select_simple_1234","actions":[{"name":"winners_list","text":"Who should win?","type":"select","data_source":"users"}]}]}

Note how the attachments argument is sent as a straight-forward JSON array.

Here's how to do that with cURL:

curl example
curl -X POST -H 'Authorization: Bearer xoxb-1234-56789abcdefghijklmnop' \
-H 'Content-type: application/json' \
--data '{"channel":"C061EG9SL","text":"I hope the tour went well, Mr. Wonka.","attachments": [{"text":"Who wins the lifetime supply of chocolate?","fallback":"You could be telling the computer exactly what it can do with a lifetime supply of chocolate.","color":"#3AA3E3","attachment_type":"default","callback_id":"select_simple_1234","actions":[{"name":"winners_list","text":"Who should win?","type":"select","data_source":"users"}]}]}' \
https://slack.com/api/chat.postMessage

What isn't changing?

You can still send application/x-www-form-urlencoded data the way you're used to on a method URL's query string or POST body.

You can still use HTTP POST on read methods, though those methods do not understand attributes presented as JSON.

You don't have to send your access tokens via the Authorization HTTP header, but we'd prefer that you did.

Nothing changes with parts of the platform that aren't the Web API.

What happens if I do nothing?

We anticipate no issues. This is a backwards compatible, opt-in change that we're confident will make development against Slack easier for many.

There is a slim chance that if you've been sending application/x-www-form-urlencoded data to us but claiming its application/json or vice-versa, or if you have a habit of gratuitously including the same token field in a variety of different ways, you'll find us at a loss for how to consider your request.

When did this happen?

As of October 30, 2017 you can send application/json POSTs to the methods detailed above. Additionally, you may now use Authorization HTTP headers to transmit tokens throughout the Web API.

Please contact us if you have any questions or concerns at feedback@slack.com.


Methods supporting JSON POSTs

These write methods currently support sending a HTTP POST with application/json.

Method & DescriptionDescription
admin.apps.approve
Approve an app for installation on a workspace.
Approve an app for installation on a workspace.
admin.apps.clearResolution
Clear an app resolution
Clear an app resolution
admin.apps.config.lookup
Look up the app config for connectors by their IDs
Look up the app config for connectors by their IDs
admin.apps.config.set
Set the app config for a connector
Set the app config for a connector
admin.apps.requests.cancel
Cancel app request for team
Cancel app request for team
admin.apps.restrict
Restrict an app for installation on a workspace.
Restrict an app for installation on a workspace.
admin.apps.uninstall
Uninstall an app from one or many workspaces, or an entire enterprise organization.
Uninstall an app from one or many workspaces, or an entire enterprise organization.
admin.audit.anomaly.allow.getItem
API to allow enterprise grid admins to read the allow list of IP blocks and ASNs from the enterprise configuration.
API to allow enterprise grid admins to read the allow list of IP blocks and ASNs from the enterprise configuration.
admin.audit.anomaly.allow.updateItem
API to allow enterprise grid admins to write/overwrite the allow list of IP blocks and ASNs from the enterprise configuration.
API to allow enterprise grid admins to write/overwrite the allow list of IP blocks and ASNs from the enterprise configuration.
admin.auth.policy.assignEntities
Assign entities to a particular authentication policy.
Assign entities to a particular authentication policy.
admin.auth.policy.getEntities
Fetch all the entities assigned to a particular authentication policy by name.
Fetch all the entities assigned to a particular authentication policy by name.
admin.auth.policy.removeEntities
Remove specified entities from a specified authentication policy.
Remove specified entities from a specified authentication policy.
admin.conversations.archive
Archive a public or private channel.
Archive a public or private channel.
admin.conversations.convertToPrivate
Convert a public channel to a private channel.
Convert a public channel to a private channel.
admin.conversations.convertToPublic
Convert a private channel to a public channel.
Convert a private channel to a public channel.
admin.conversations.create
Create a public or private channel-based conversation.
Create a public or private channel-based conversation.
admin.conversations.delete
Delete a public or private channel.
Delete a public or private channel.
admin.conversations.disconnectShared
Disconnect a connected channel from one or more workspaces.
Disconnect a connected channel from one or more workspaces.
admin.conversations.getConversationPrefs
Get conversation preferences for a public or private channel.
Get conversation preferences for a public or private channel.
admin.conversations.getCustomRetention
This API endpoint can be used by any admin to get a conversation's retention policy.
This API endpoint can be used by any admin to get a conversation's retention policy.
admin.conversations.getTeams
Get all the workspaces a given public or private channel is connected to within this Enterprise org.
Get all the workspaces a given public or private channel is connected to within this Enterprise org.
admin.conversations.invite
Invite a user to a public or private channel.
Invite a user to a public or private channel.
admin.conversations.removeCustomRetention
This API endpoint can be used by any admin to remove a conversation's retention policy.
This API endpoint can be used by any admin to remove a conversation's retention policy.
admin.conversations.rename
Rename a public or private channel.
Rename a public or private channel.
admin.conversations.search
Search for public or private channels in an Enterprise organization.
Search for public or private channels in an Enterprise organization.
admin.conversations.setConversationPrefs
Set the posting permissions for a public or private channel.
Set the posting permissions for a public or private channel.
admin.conversations.setCustomRetention
This API endpoint can be used by any admin to set a conversation's retention policy.
This API endpoint can be used by any admin to set a conversation's retention policy.
admin.conversations.setTeams
Set the workspaces in an Enterprise grid org that connect to a public or private channel.
Set the workspaces in an Enterprise grid org that connect to a public or private channel.
admin.conversations.unarchive
Unarchive a public or private channel.
Unarchive a public or private channel.
admin.functions.list
Look up functions by a set of apps
Look up functions by a set of apps
admin.functions.permissions.lookup
Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities.
Lookup the visibility of multiple Slack functions and include the users if it is limited to particular named entities.
admin.functions.permissions.set
Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities
Set the visibility of a Slack function and define the users or workspaces if it is set to named_entities
admin.inviteRequests.approve
Approve a workspace invite request.
Approve a workspace invite request.
admin.inviteRequests.approved.list
List all approved workspace invite requests.
List all approved workspace invite requests.
admin.inviteRequests.denied.list
List all denied workspace invite requests.
List all denied workspace invite requests.
admin.inviteRequests.deny
Deny a workspace invite request.
Deny a workspace invite request.
admin.inviteRequests.list
List all pending workspace invite requests.
List all pending workspace invite requests.
admin.roles.addAssignments
Adds members to the specified role with the specified scopes
Adds members to the specified role with the specified scopes
admin.teams.create
Create an Enterprise team.
Create an Enterprise team.
admin.teams.list
List all teams on an Enterprise organization
List all teams on an Enterprise organization
admin.teams.settings.info
Fetch information about settings in a workspace
Fetch information about settings in a workspace
admin.teams.settings.setDescription
Set the description of a given workspace.
Set the description of a given workspace.
admin.teams.settings.setDiscoverability
An API method that allows admins to set the discoverability of a given workspace
An API method that allows admins to set the discoverability of a given workspace
admin.teams.settings.setName
Set the name of a given workspace.
Set the name of a given workspace.
admin.usergroups.addChannels
Add up to one hundred default channels to an IDP group.
Add up to one hundred default channels to an IDP group.
admin.usergroups.addTeams
Associate one or more default workspaces with an organization-wide IDP group.
Associate one or more default workspaces with an organization-wide IDP group.
admin.usergroups.listChannels
List the channels linked to an org-level IDP group (user group).
List the channels linked to an org-level IDP group (user group).
admin.usergroups.removeChannels
Remove one or more default channels from an org-level IDP group (user group).
Remove one or more default channels from an org-level IDP group (user group).
admin.users.assign
Add an Enterprise user to a workspace.
Add an Enterprise user to a workspace.
admin.users.invite
Invite a user to a workspace.
Invite a user to a workspace.
admin.users.list
List users on a workspace
List users on a workspace
admin.users.remove
Remove a user from a workspace.
Remove a user from a workspace.
admin.users.session.clearSettings
Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users.
Clear user-specific session settings—the session duration and what happens when the client closes—for a list of users.
admin.users.session.getSettings
Get user-specific session settings—the session duration and what happens when the client closes—given a list of users.
Get user-specific session settings—the session duration and what happens when the client closes—given a list of users.
admin.users.session.invalidate
Revoke a single session for a user. The user will be forced to login to Slack.
Revoke a single session for a user. The user will be forced to login to Slack.
admin.users.session.list
List active user sessions for an organization
List active user sessions for an organization
admin.users.session.reset
Wipes all valid sessions on all devices for a given user
Wipes all valid sessions on all devices for a given user
admin.users.session.resetBulk
Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users
Enqueues an asynchronous job to wipe all valid sessions on all devices for a given list of users
admin.users.session.setSettings
Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users.
Configure the user-level session settings—the session duration and what happens when the client closes—for one or more users.
admin.users.setAdmin
Set an existing guest, regular user, or owner to be an admin user.
Set an existing guest, regular user, or owner to be an admin user.
admin.users.setExpiration
Set an expiration for a guest user
Set an expiration for a guest user
admin.users.setOwner
Set an existing guest, regular user, or admin user to be a workspace owner.
Set an existing guest, regular user, or admin user to be a workspace owner.
admin.users.setRegular
Set an existing guest user, admin user, or owner to be a regular user.
Set an existing guest user, admin user, or owner to be a regular user.
admin.workflows.collaborators.add
Add collaborators to workflows within the team or enterprise
Add collaborators to workflows within the team or enterprise
admin.workflows.collaborators.remove
Remove collaborators from workflows within the team or enterprise
Remove collaborators from workflows within the team or enterprise
admin.workflows.permissions.lookup
Look up the permissions for a set of workflows
Look up the permissions for a set of workflows
admin.workflows.search
Search workflows within the team or enterprise
Search workflows within the team or enterprise
admin.workflows.triggers.types.permissions.lookup
list the permissions for using each trigger type in workflow builder
list the permissions for using each trigger type in workflow builder
admin.workflows.triggers.types.permissions.set
Set the permissions for using a trigger type in workflow builder
Set the permissions for using a trigger type in workflow builder
admin.workflows.unpublish
Unpublish workflows within the team or enterprise
Unpublish workflows within the team or enterprise
api.test
Checks API calling code.
Checks API calling code.
apps.auth.external.delete
Delete external auth tokens only on the Slack side
Delete external auth tokens only on the Slack side
apps.auth.external.get
Get the access token for the provided token ID
Get the access token for the provided token ID
apps.connections.open
Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads over.
Generate a temporary Socket Mode WebSocket URL that your app can connect to in order to receive events and interactive payloads over.
apps.datastore.bulkDelete
Delete items from a datastore in bulk
Delete items from a datastore in bulk
apps.datastore.bulkGet
Get items from a datastore in bulk
Get items from a datastore in bulk
apps.datastore.bulkPut
Creates or replaces existing items in bulk
Creates or replaces existing items in bulk
apps.datastore.count
Count the number of items in a datastore that match a query
Count the number of items in a datastore that match a query
apps.datastore.delete
Delete an item from a datastore
Delete an item from a datastore
apps.datastore.get
Get an item from a datastore
Get an item from a datastore
apps.datastore.put
Creates a new item, or replaces an old item with a new item.
Creates a new item, or replaces an old item with a new item.
apps.datastore.query
Query a datastore for items
Query a datastore for items
apps.datastore.update
Edits an existing item's attributes, or adds a new item if it does not already exist.
Edits an existing item's attributes, or adds a new item if it does not already exist.
apps.event.authorizations.list
Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to.
Get a list of authorizations for the given event context. Each authorization represents an app installation that the event is visible to.
apps.manifest.create
Create an app from an app manifest.
Create an app from an app manifest.
apps.manifest.delete
Permanently deletes an app created through app manifests
Permanently deletes an app created through app manifests
apps.manifest.export
Export an app manifest from an existing app
Export an app manifest from an existing app
apps.manifest.update
Update an app from an app manifest
Update an app from an app manifest
apps.manifest.validate
Validate an app manifest
Validate an app manifest
auth.test
Checks authentication & identity.
Checks authentication & identity.
bookmarks.add
Add bookmark to a channel.
Add bookmark to a channel.
bookmarks.edit
Edit bookmark.
Edit bookmark.
bookmarks.list
List bookmark for the channel.
List bookmark for the channel.
bookmarks.remove
Remove bookmark from the channel.
Remove bookmark from the channel.
calls.add
Registers a new Call.
Registers a new Call.
calls.end
Ends a Call.
Ends a Call.
calls.info
Returns information about a Call.
Returns information about a Call.
calls.participants.add
Registers new participants added to a Call.
Registers new participants added to a Call.
calls.participants.remove
Registers participants removed from a Call.
Registers participants removed from a Call.
calls.update
Updates information about a Call.
Updates information about a Call.
channels.create
Creates a channel.
Creates a channel.
channels.invite
Invites a user to a channel.
Invites a user to a channel.
channels.mark
Sets the read cursor in a channel.
Sets the read cursor in a channel.
chat.delete
Deletes a message.
Deletes a message.
chat.deleteScheduledMessage
Deletes a pending scheduled message from the queue.
Deletes a pending scheduled message from the queue.
chat.meMessage
Share a me message into a channel.
Share a me message into a channel.
chat.postEphemeral
Sends an ephemeral message to a user in a channel.
Sends an ephemeral message to a user in a channel.
chat.postMessage
Sends a message to a channel.
Sends a message to a channel.
chat.scheduleMessage
Schedules a message to be sent to a channel.
Schedules a message to be sent to a channel.
chat.scheduledMessages.list
Returns a list of scheduled messages.
Returns a list of scheduled messages.
chat.unfurl
Provide custom unfurl behavior for user-posted URLs
Provide custom unfurl behavior for user-posted URLs
chat.update
Updates a message.
Updates a message.
conversations.acceptSharedInvite
Accepts an invitation to a Slack Connect channel.
Accepts an invitation to a Slack Connect channel.
conversations.approveSharedInvite
Approves an invitation to a Slack Connect channel
Approves an invitation to a Slack Connect channel
conversations.archive
Archives a conversation.
Archives a conversation.
conversations.close
Closes a direct message or multi-person direct message.
Closes a direct message or multi-person direct message.
conversations.create
Initiates a public or private channel-based conversation
Initiates a public or private channel-based conversation
conversations.declineSharedInvite
Declines a Slack Connect channel invite.
Declines a Slack Connect channel invite.
conversations.history
Fetches a conversation's history of messages and events.
Fetches a conversation's history of messages and events.
conversations.invite
Invites users to a channel.
Invites users to a channel.
conversations.inviteShared
Sends an invitation to a Slack Connect channel
Sends an invitation to a Slack Connect channel
conversations.join
Joins an existing conversation.
Joins an existing conversation.
conversations.kick
Removes a user from a conversation.
Removes a user from a conversation.
conversations.leave
Leaves a conversation.
Leaves a conversation.
conversations.listConnectInvites
Lists shared channel invites that have been generated or received but have not been approved by all parties
Lists shared channel invites that have been generated or received but have not been approved by all parties
conversations.mark
Sets the read cursor in a channel.
Sets the read cursor in a channel.
conversations.open
Opens or resumes a direct message or multi-person direct message.
Opens or resumes a direct message or multi-person direct message.
conversations.rename
Renames a conversation.
Renames a conversation.
conversations.setPurpose
Sets the purpose for a conversation.
Sets the purpose for a conversation.
conversations.setTopic
Sets the topic for a conversation.
Sets the topic for a conversation.
conversations.unarchive
Reverses conversation archival.
Reverses conversation archival.
dialog.open
Open a dialog with a user
Open a dialog with a user
dnd.endDnd
Ends the current user's Do Not Disturb session immediately.
Ends the current user's Do Not Disturb session immediately.
dnd.endSnooze
Ends the current user's snooze mode immediately.
Ends the current user's snooze mode immediately.
dnd.setSnooze
Turns on Do Not Disturb mode for the current user, or changes its duration.
Turns on Do Not Disturb mode for the current user, or changes its duration.
files.comments.delete
Deletes an existing comment on a file.
Deletes an existing comment on a file.
files.completeUploadExternal
Finishes an upload started with files.getUploadURLExternal
Finishes an upload started with files.getUploadURLExternal
files.delete
Deletes a file.
Deletes a file.
files.revokePublicURL
Revokes public/external sharing access for a file
Revokes public/external sharing access for a file
files.sharedPublicURL
Enables a file for public/external sharing.
Enables a file for public/external sharing.
functions.completeError
Signal that a function failed to complete
Signal that a function failed to complete
functions.completeSuccess
Signal the successful completion of a function
Signal the successful completion of a function
functions.distributions.permissions.add
Grant users access to a custom slack function that has its permission type set to named_entitiess
Grant users access to a custom slack function that has its permission type set to named_entitiess
functions.distributions.permissions.list
List the visibility of a custom slack function and include the users with access if its permission type is set to named_entities
List the visibility of a custom slack function and include the users with access if its permission type is set to named_entities
functions.distributions.permissions.remove
Revoke users' access to a custom slack function that has its permission type set to named_entities
Revoke users' access to a custom slack function that has its permission type set to named_entities
functions.distributions.permissions.set
Set the remixability of a slack function and define the users to be granted access if permission_type is set to named_entities
Set the remixability of a slack function and define the users to be granted access if permission_type is set to named_entities
functions.workflows.steps.list
List the steps of a specific function of a workflow's versions
List the steps of a specific function of a workflow's versions
functions.workflows.steps.responses.export
Download form responses of a workflow
Download form responses of a workflow
groups.create
Creates a private channel.
Creates a private channel.
groups.invite
Invites a user to a private channel.
Invites a user to a private channel.
groups.mark
Sets the read cursor in a private channel.
Sets the read cursor in a private channel.
groups.open
Opens a private channel.
Opens a private channel.
im.mark
Sets the read cursor in a direct message channel.
Sets the read cursor in a direct message channel.
im.open
Opens a direct message channel.
Opens a direct message channel.
mpim.mark
Sets the read cursor in a multiparty direct message channel.
Sets the read cursor in a multiparty direct message channel.
mpim.open
This method opens a multiparty direct message.
This method opens a multiparty direct message.
pins.add
Pins an item to a channel.
Pins an item to a channel.
pins.remove
Un-pins an item from a channel.
Un-pins an item from a channel.
reactions.add
Adds a reaction to an item.
Adds a reaction to an item.
reactions.remove
Removes a reaction from an item.
Removes a reaction from an item.
reminders.add
Creates a reminder.
Creates a reminder.
reminders.complete
Marks a reminder as complete.
Marks a reminder as complete.
reminders.delete
Deletes a reminder.
Deletes a reminder.
stars.add
Save an item for later. Formerly known as adding a star.
Save an item for later. Formerly known as adding a star.
stars.remove
Removes a saved item (star) from an item.
Removes a saved item (star) from an item.
usergroups.create
Create a User Group.
Create a User Group.
usergroups.disable
Disable an existing User Group.
Disable an existing User Group.
usergroups.enable
Enable a User Group.
Enable a User Group.
usergroups.update
Update an existing User Group.
Update an existing User Group.
usergroups.users.update
Update the list of users for a user group.
Update the list of users for a user group.
users.profile.set
Set a user's profile information, including custom status.
Set a user's profile information, including custom status.
users.setActive
Marked a user as active. Deprecated and non-functional.
Marked a user as active. Deprecated and non-functional.
users.setPresence
Manually sets user presence.
Manually sets user presence.
views.open
Open a view for a user.
Open a view for a user.
views.publish
Publish a static view for a User.
Publish a static view for a User.
views.push
Push a view onto the stack of a root view.
Push a view onto the stack of a root view.
views.update
Update an existing view.
Update an existing view.
workflows.stepCompleted
Indicate that an app's step in a workflow completed execution.
Indicate that an app's step in a workflow completed execution.
workflows.stepFailed
Indicate that an app's step in a workflow failed to execute.
Indicate that an app's step in a workflow failed to execute.
workflows.triggers.permissions.add
Allows users to run a trigger that has its permission type set to named_entities
Allows users to run a trigger that has its permission type set to named_entities
workflows.triggers.permissions.list
Returns the permission type of a trigger and if applicable, includes the entities that have been granted access
Returns the permission type of a trigger and if applicable, includes the entities that have been granted access
workflows.triggers.permissions.remove
Revoke an entity's access to a trigger that has its permission type set to named_entities
Revoke an entity's access to a trigger that has its permission type set to named_entities
workflows.triggers.permissions.set
Set the permission type for who can run a trigger
Set the permission type for who can run a trigger
workflows.updateStep
Update the configuration for a workflow step.
Update the configuration for a workflow step.

Is your favorite method missing? Let us know.

Tips when preparing your JSON

Having trouble properly formatting your JSON? Here are some quick tips:

  • JSON should never contain trailing commas; a stray comma will invalidate your JSON.
  • JSON may not include comments, either of the // or # variety.
  • For better readability, JSON may include additional whitespace and tabbing between keys and values. However, minify unmeaningful whitespace for best performance.
  • Verify that your keys and other strings are enclosed in double quote characters: "
  • Set your Content-type HTTP header to application/json
  • Send your application's token as an Authorization HTTP header beginning with "Bearer ": Authorization: Bearer xoxb-12345-abcdefghjk

Was this page helpful?