APIのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)

----------

+ [ITアーキテクチャに最適なAPIを選択するために](https://qiita.com/Keiji_otsubo/items/8d31b44c3cf0421838ba)

-----------

+ [Salesforce で API アクセスを有効にする](https://qiita.com/Keiji_otsubo/items/a65d4d87fd05e8098bcc)
+ [APIコール時のエラーでデバッグログを作成する](https://qiita.com/Keiji_otsubo/items/5144aafa6a41b35cc2fd)
+ [Salesforce API を使ったコールアウト](https://qiita.com/Keiji_otsubo/items/641b76d85b2e08406f7b)
+ [API バージョンの廃止に備えるための新しいツール【Salesforce 開発者ブログから】](https://qiita.com/Keiji_otsubo/items/3bb2e4e7462d4fdf3588)
+ [レガシ API の使用状況を特定する：廃止予定のAPIを探す](https://qiita.com/Keiji_otsubo/items/b0b3bd7bd91706e13393)
+ [使用しているAPIバージョンの検索について](https://qiita.com/Keiji_otsubo/items/c45a7cbc754e105a28c1)
+ [古いAPIバージョンの廃止の驚くべき事実。](https://qiita.com/Keiji_otsubo/items/709d0463ec28fa481b48)


+ [No 'Access-Control-Allow-Origin' header is present on the requested resource.](https://qiita.com/Keiji_otsubo/items/f0f50eefbd6ead394e20)
+ [SalesforceのAPIを使う時に間違えやすいポイント](https://qiita.com/Keiji_otsubo/items/0f7011505933aff55204)
+ [SOAP APIのまとめ](https://qiita.com/Keiji_otsubo/items/b2dfa8bcf8191fd4f57d)
+ [API WSDL のまとめ](https://qiita.com/Keiji_otsubo/items/01f2818c88a0f1b3530d)


# 制限

+ [サブフローを用いた場合のAPI制限について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007F4Kj7)
+ [I recently discovered that the daily API limit for a Salesforce scratch org is now 5 million, a significant increase from the previous 15,000. Is this change permanent? Will these limits remain in place?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ajpXI)

変更があったか調査中みたい

+ [1 日の API 使用制限を超えているアプリケーション、自動化、または API リクエストを確認する方法はありますか? 組織で API 使用制限に達したため、Salesforce サポートに連絡し、一時的に制限を引き上げてもらいましたが、API リクエストは増加し続けました。セットアップによるシステム概要と会社情報の他に、増加の原因となっている API リクエストを分析するために使用できる別のセクションまたはツールはありますか?]()

:::note
これをチェックしてください 

https://help.salesforce.com/s/articleView?id=000385367&type=1
 
https://help.salesforce.com/s/articleView?id=000389027&type=1
:::

+ [行動の通知設定変更について](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PYmM6)

:::note 
個人の設定 の項目はAPIからは変更できないと回答されていますね。 


https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8w6USAR

もしかしたらと思ってユーザーインターフェースAPIを見ましたが機能はないですね。 
APIが使えないとなると一括で変更する方法を思いつくことはできないです。 メタデータにもなさそう
:::



# 特殊文字

+ [Special Character in username not allowed while fetching user with SCIM API](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqoBg)

:::note alert
{
    "schemas": "[\"urn:ietf:params:scim:api:messages:2.0:Error\"]",
    "detail": "expecting a right parentheses, found 'pert.peter'",
    "status": 400
}
:::


# レスポンス

+ [WebアプリケーションからREST API経由でレコードを参照する際のレスポンス](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZA5pw)

:::note
以下に書かれているように、カスタマイズの設定によって異なるので正確には分からないようです。実際に試してみるのがいいと書かれています。

例えばPostmanなどのツールを使えばレスポンス時間を確かめることができると思います。

There's no way to know, because (a) customizations can increase the time, and (b) system load does have some impact.

The minimal amount of time for a pristine org is about 1ms per record (1/1,000th of a second), and can easily be over 10,000ms per record.

If you're really curious, try a load late at night and one at noon. That should give you theoretical minimums and maximums for your org.

https://salesforce.stackexchange.com/questions/192929/response-time-benchmarks-for-salesforce-apis

APIの制限にも注意が必要です。

API Request Limits and Allocations
https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm
:::

+ [REST API 応答で「AccessToken」フィールドを表示する方法はありますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007agf40)

:::note
API 応答でアクセス トークンを公開すると、セキュリティ リスクが生じるため、お勧めできません。

アクセス トークンを安全に取得するには、OAuth 認証フローの使用を検討してください。 OAuth を使用してアクセス トークンを取得すると、それを使用して承認された API リクエストを行うことができます。
:::


# 接続のための接続アプリの設定

+ [接続アプリを設定してみる](https://qiita.com/Keiji_otsubo/items/b93e68fffe6d5bc2a296)

# CURL環境

+ [debian12 環境設定 再度新しいPCにインストールする](https://qiita.com/Keiji_otsubo/items/26ade953454adfe9f760)
+ [PowerAutomate を使って接続アプリを設定してみる【ライセンスがないので無理でした】](https://qiita.com/Keiji_otsubo/items/e911ca45c8b7c2f527ba)

# テスト方法

 + [Security Testing on Salesforce](https://qiita.com/Keiji_otsubo/items/2c523c75c6564d6e3e2a)


# ヘッドレス API

+ [ヘッドレス API のカスタムデータ パラメータは常に null です](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000TZRq)

# 各種API

### A

+ [Apex REST API のまとめ](https://qiita.com/Keiji_otsubo/items/fef85ba70885b59f24d8)
+ [Apex SOAP Callouts](https://qiita.com/Keiji_otsubo/items/dda21f5f435c64244834)

### B

+ [Salesforce でBox APIを使う](https://qiita.com/Keiji_otsubo/items/0a0c130da66bc49048f2)
+ [Bulk APIを使ったデータ連携(準備編)](https://qiita.com/Keiji_otsubo/items/ea283163ab9940d3672a)

### Bulk API

+ [Apex 経由で API の詳細を一括取得するにはどうすればよいですか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T5UXx)

:::note
Please check this article.

https://salesforce.stackexchange.com/questions/405623/bulk-api-query-job-in-apex-with-big-response
:::

+ [How to retrieve failedResults with Bulk api](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Ur8GHSAZ)

204 に基づくと、これは DELETE リクエストと一部の PATCH リクエストの「No Content」成功コードであるようです。使用されるコンテキストに関係なく、ステータス コード 204 は常に成功応答です。

https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/errorcodes.htm

+ [errorCode":"NOT_FOUND","message":"The requested resource does not exist"](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KfvFz)

:::note
it seems like I found the issue. It turns out it was a User Permission within System Settings (see screenshot).  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/896a746d-f074-a592-bb1c-ebecdf598ae4.png)
:::


### CPQ API

+ [CPQ APIを使ってみます](https://qiita.com/Keiji_otsubo/items/ab9abd7e59d96d5d7fe0)


### ChatREST API 

+ [How do you use the ChatREST API ChasitorInit endpoint to search for a contact record based on first name, last name, and email?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007X7MnB)

### C
+ [ConnectApi のまとめ](https://qiita.com/Keiji_otsubo/items/dd8a31be959dc237473a)
+ [Is anyone using SOAP API and a C# client?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PY8mN)

:::note
The slowdown may be caused by .Net 8's async runtime or outdated WSDL proxies. If feasible, consider switching to REST API to improve performance.
:::

### E

+ [empApi](https://qiita.com/Keiji_otsubo/items/c50734fa06a1d1070f13)

### F

+ [CURLコマンドを使ってfreee APIにアクセスする](https://qiita.com/Keiji_otsubo/items/723a1535cc8babb343b7)
+ [Salesforceからfreee APIを使ってみました](https://qiita.com/Keiji_otsubo/items/df8e07d4db1085bc0e15)
+ [Salesforceからfreee APIを使ってみました2](https://qiita.com/Keiji_otsubo/items/d53c7d6c72035efb6167)

### G

+ [gRPC API のまとめ](https://qiita.com/Keiji_otsubo/items/2ebb8160fc33273b0c6a)

### K

+ [Knowledge REST API](https://qiita.com/Keiji_otsubo/items/956ae86cc60edbe68a05)

### L
+ [LocationService API](https://qiita.com/Keiji_otsubo/items/fe73925da638ba3aa0ef)

### M

+ [Apexを使ってメタデータAPIを操作する](https://qiita.com/Keiji_otsubo/items/51d3eb3653a2c1c81f4c)
+ [Meta data APIを操作する](https://qiita.com/Keiji_otsubo/items/51d3eb3653a2c1c81f4c)
+ [Models API](https://qiita.com/Keiji_otsubo/items/1053d7372aac2125e264)

### P
+ [Pardot API](https://qiita.com/Keiji_otsubo/items/753f8e6d52f35bce044e)

### PubSub API 

+ [SchemaId を使用した PubSub API のバグの可能性](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007IeOvQ)

### R
+ [Salesforce Reports and Dashboards REST API](https://qiita.com/Keiji_otsubo/items/f5a0d17e857140448293)
+ [Salesforce Reports and Dashboards API via Apexを使ってみる](https://qiita.com/Keiji_otsubo/items/e325c564eb5f04399362)
+ [REST API を使ってファイルをアップロードする](https://qiita.com/Keiji_otsubo/items/6f155e4bb123552b64ca)
+ [REST API での外部 ID を使用したレコードの更新](https://help.salesforce.com/s/articleView?id=release-notes.rn_api_new_updateonly_param.htm&release=250&type=5)

:::note
REST API の新しい updateOnly パラメーターにより、外部 ID の値を使用してレコードを更新できるようになりました。以前は、外部 ID を使用してレコードを更新/挿入する必要がありました。
:::

### S

+ [Streaming API](https://qiita.com/Keiji_otsubo/items/5a5f6c3c6d16fd20b56d)
+ [SFDC SOAP API を ASP.NET CORE MVC(C#) で利用したい。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007WgjzR)
:::note
英語ですが、以下を参考にしてみてください。

Connect to the Salesforce SOAP API in .Net
https://shetland.azurewebsites.net/2021/05/11/connect-to-the-salesforce-soap-api-in-net/
:::

### T
+ [Tooling API のトラブル](https://qiita.com/Keiji_otsubo/items/dc84fee0d879237f6dae)
+ [trust api](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000VKTx0AO)

### U
+ [ユーザインターフェース API](https://qiita.com/Keiji_otsubo/items/caba7762b413ba6920b8)





### V
+ [VB.NETからのコール BULK API 2.0 Import Data with newline](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000076B6wd)
+ [Visualforce Remoting API ](https://help.salesforce.com/s/articleView?id=release-notes.rn_fieldservice_visualforce_remoting_api.htm&release=236&type=5)


### Y

+ [Yoomのまとめ](https://qiita.com/Keiji_otsubo/items/d6e44731ded354e7f9be)


# トラブルシューティング

+ [CMS Enhanced Workspace にアクセスできない](https://qiita.com/Keiji_otsubo/items/43303ca77d87d02efa3a)
+ [Connect REST API エンドポイント /connect/notifications を使用して空の通知リストを受け取りました。](https://qiita.com/Keiji_otsubo/items/5f52610bdd8d511b0953)
+ [OAuth Error](https://qiita.com/Keiji_otsubo/items/4a2af699cb6287bbda7e)
+ [400 Bad Request](https://qiita.com/Keiji_otsubo/items/2e96872af51294711184)
+ [500 エラーの時のチェックポイント](https://support.postman.com/hc/en-us/articles/6018809487255-Fixing-a-500-internal-server-error-response)
  + [Apex post json question](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Kh2Kw)


:::note
+ Make sure there is no error in the configuration of your request. Look for typos, whitespaces, or invalid JSON formatting.
+ Compare the API documentation of the service you’re making a call to with the configuration of your request. Check that the elements below are configured correctly in the request:
  + The request headers
  + The parameters in the request body
  + The query parameters
  + The HTTP method
:::


+ [{"message":"Endpoint '\/get' does not exist"}".](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000076E8U0)

:::note
 In postman you are send parama as Query parameters but in your code you are sending as body...that make the server to takes this request as POST request...


postmanではパラメータをクエリパラメータとして送信していますが、コードでは本文として送信しています...これにより、サーバーはこのリクエストをPOSTリクエストと
:::

+ [om.streamsets.pipeline.api.StageException: FORCE_21 - Can't get metadata for object XXX](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8y4f)
+ [HTTP Method 'GET' not allowed. Allowed are POST](https://qiita.com/Keiji_otsubo/items/17ddc615c2dd56220999)

+ [500 Platform API Basics > Use SOAP API](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ak28M)

:::note
As mentioned in the unit steps, you have to add the security token at the end of the password.
:::

+ [This session is not valid for use with the REST API : INVALID_SESSION_ID](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epXoxSAE)

+ [INVALID_FIELD](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmBsm)

:::note alert

```
[
    {
        "message": "\nSelect MonthlyLoginsEntitlement,MonthlyLoginsUsed\n       ^\nERROR at Row:1:Column:8\nNo such column 'MonthlyLoginsEntitlement' on entity 'UserLicense'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names.",
        "errorCode": "INVALID_FIELD"
    }
]
```

:::

+ [System.JSONException:Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at input location [1,2]](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cmJil)

:::note
このコールアウトのレスポンスですが、Json形式で返ってきていないような気がします。

'<' (code 60)) から考えると XMLあるいはHTMLのタグが返ってきていると思います。

String responseBodyの中身を確かめてみてください。
:::

+ [Can't Send Request to Rest web service class from the Postman](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eqFTo)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/5d833cd1-4819-6fb3-208c-733272ccc8d0.png)

:::note
Since it's a 404 error, I think the URL is wrong.

Try this

SiteURL/services/apexrest/ArdiraSurvey/testTwilio
:::


# API アクセス制御機能は SOAP API に影響しますか?

+ [API アクセス制御機能は SOAP API に影響しますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgJkN)

API アクセス制御を使用して、承認された接続アプリケーションを通じて事前承認されていない限り、ユーザが Salesforce API にアクセスするのを制限できます。
接続アプリケーションは、外部アプリケーションを Salesforce API と統合します。
API アクセス制御を使用すると、すべての接続アプリケーションの Salesforce API へのアクセスをロックダウンしてから、特定の接続アプリケーションを承認 (許可リストに登録) できます。
プロファイルと権限セットを使用して、承認された接続アプリケーションへのアクセス権をユーザーに付与できます。これらのユーザは、接続アプリケーションを介して API にアクセスできます。

同じ質問をお持ちの方のために、カスタマー サクセス チームに連絡したところ、PM から返信がありました。

これを有効にすると、接続されたアプリによって生成されたトークンを使用していない限り、すべての API 呼び出しがブロックされるため、SOAP ログインもブロックされます。  
ログインがブロックされない可能性がありますが、SOAP login() 呼び出しから受信したセッションは、どの API でも機能しません (接続されたアプリケーションを介していないため)。

API アクセス制御を有効にして、「管理者が承認したユーザーは、許可リストに登録された接続アプリのみに API アクセスを制限する」に設定した場合、Salesforce 組織へのすべての API 呼び出しで、許可リストに登録された接続アプリからトークンを取得する必要がありますか?ユーザー名とパスワードを使用して SOAP login() を実行しなくなりましたか?  

答えは「はい」です。また、SOAP API を使用する場合は、OAuth ログイン フローを使用して、SOAP API 呼び出しで使用できるトークンを取得する必要があります。

+ [Use SOAP API unit - cannot get logged in](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000O6oa1)


# 相互認証

+ [外部Webサービス(REST API)へのApexでのコールアウトに際して必要な設定](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007A3BUh)


# API only user

+ [Anyone who have used Integration User for API only operations?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007CtFZq)

:::note alert
"statusCode": "400",
"message": "insufficient access rights on object id",
:::

:::note
What I did: create a permission set (not a permission set license), which gives access to the Account, Contact, etc. object.

And, important: the permission set must have the License "Salesforce API Integration". 

https://salesforce.stackexchange.com/questions/400073/trying-to-use-salesforce-integration-user-license-unable-to-access-accounts-et
:::

# APIのアップデート

+ [APIアップデート](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PiA16)

:::note
ここで重要なのは、「カスタム コードが大量にありますか?」ということです。

Salesforce 組織にどのようなカスタマイズが追加されたかを理解することは常に価値があります。組織の年齢は開始点として適しています。インストールされた日付は、[設定] > [会社情報] で確認できます。

古い組織では、より多くのカスタム コードが含まれる傾向があります。これは、廃止される古い API バージョンが最も影響を与える可能性がある部分です。古いコードは通常、古い API バージョンを意味します。これが自分に当てはまると思われる場合は、懸念事項の確認と特定を支援してもらうための無料プロジェクト ( impactexchange.salesforce.com ) を依頼する必要があります。

多くの統合を行っている組織 (たとえば、複数のプラットフォームから寄付を受け入れている場合、またはオンライン フォームがある場合) には、多くの場合、パッケージ化されたものが大量にインストールされています ([設定] > [アプリ] > [パッケージ化] > [インストール済みパッケージ])。幸いなことに、ソフトウェアが最新の API バージョンを使用しているかどうかは、アプリプロバイダーの責任です。インストールされている各パッケージの最終変更日を確認する必要があります。2 年前より古いものについては、プロバイダー (パッケージの AppExchange ページから始めます) に問い合わせて、内容を確認する必要がある場合があります。場合によっては、ベンダーが失踪し、パッケージを入手するためにアクセスできなくなる場合があります。この時点で、おそらくそのパッケージを削除し、代わりのパッケージを探すことを検討する必要があります。ユーザーが使用していない可能性もあります。
:::

# Apex、Visualforceページ バージョン36.0～39.0と45.0の変更点について

+ [Apex、Visualforceページ バージョン36.0～39.0と45.0の変更点について](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007QcmF8)

:::note
今回の件に関連するような質問と回答があります。

APIのバージョンのアップグレードの関する既知の問題の包括的なリストはSalesforceの中で管理されているのか？→　そんな資料は見たことがない。

私も見たことがないですね。あれば欲しいです。価値があると回答されてますね。
対象のクラスを抽出してSandboxで確認するしかないと思います。まずはテストクラスがエラーにならないかを確認してみてください。

  I can think of the SeeAllData as well, API 28 to 29 or thereabouts. Lately, though, I don't have specific "break" examples to draw from when moving UP the API ladder. Is there a comprehensive list of known issues when upgrading API versions, maintained by SF or anyone else, for that matter?

  I haven't seen such a list. These things, such as breaking changes, tend to appear in the release notes and then get forgotten about. There were several when the new Apex compiler was released. I haven't seen a single source. It could be something worth putting together and then adding to over time. 

https://salesforce.stackexchange.com/questions/229795/is-there-a-way-to-upgrade-api-versions-of-all-apex-classes-without-manually-upda
:::




# B2C Commerce 

+ [現在、XML 価格表を使用して製品の価格を更新しています。 API 経由で製品を直接更新したいと考えています。さまざまなドキュメントを調べましたが、適切な API が見つかりませんでした。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007X7fBWSAZ)


:::note
You can't update Price with Rest APIs. An update of the price can only be done via XML import. You could create a job that imports XML file with prices, and trigger the job via Rest API.

In the unofficial community there is a thread on this topic -> https://sfcc-unofficial.slack.com/archives/CAT794PC3/p1701767509593959

REST API を使用して価格を更新することはできません。価格の更新は、XML インポート経由でのみ行うことができます。価格を含む XML ファイルをインポートするジョブを作成し、Rest API 経由でジョブをトリガーできます。

非公式コミュニティには、このトピックに関するスレッドがあります -> https://sfcc-unofficial.slack.com/archives/CAT794PC3/p1701767509593959
:::



# マーケティング クラウド API/Postman

+ [放棄されたカートの旅のための API を探しています。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZAqpg)

:::note
以下は放棄されたカートに特化した API ではなく、ジャーニーを開始するためのエントリー イベントを発生させる API です。以下を参考に実装してみてください。

https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/postEvent.html
:::

# Open API対応

+ [The Open API type or format is not supported: type: null, format: null"](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBaHR)