> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.
# List external API calls
> List external API call steps, optionally filtered by action or attribute.
Returns external API call records in the workspace. The wire-format object is still called [`Data Step`](/en/api-reference/actions-and-attributes#data-step-object). Pass `toolId` to list only the calls for one action or attribute, ordered by `stepNumber`.
## Headers
<ParamField header="Authorization" type="string" required>
Bearer token containing your Fini workspace API key. Format: `Bearer fini_...` The key needs `read` scope.
</ParamField>
## Query parameters
<ParamField query="toolId" type="string">
Optional action or attribute ID. When set, returns only that record's external API calls, ordered by `stepNumber`.
</ParamField>
## Response
Returns a top-level array of [`Data Step`](/en/api-reference/actions-and-attributes#data-step-object) objects with sensitive values masked.
<RequestExample>
~~~bash cURL theme={null}
curl --request GET \
--url 'https://api-prod.usefini.com/v2/api-function-configs/public?toolId=4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3' \
--header 'Authorization: Bearer fini_your_api_key'
~~~
~~~javascript Node.js theme={null}
const response = await fetch('https://api-prod.usefini.com/v2/api-function-configs/public?toolId=4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3', {
method: 'GET',
headers: {
Authorization: 'Bearer fini_your_api_key'
}
});
const data = await response.json();
~~~
~~~python Python theme={null}
import requests
response = requests.get(
"https://api-prod.usefini.com/v2/api-function-configs/public?toolId=4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
headers={"Authorization": "Bearer fini_your_api_key"},
)
data = response.json()
~~~
</RequestExample>
<ResponseExample>
~~~json 200 OK theme={null}
[
{
"id": "4f5ef695-d03b-4d56-8fef-7f2bd5c17ef3",
"name": "Lookup customer",
"method": "GET",
"url": "https://api.example.com/customers/{customerId}",
"headers": {
"Authorization": "Bearer ${apiToken}"
},
"saveFromResponse": {
"plan": "customer.plan",
"status": "customer.status"
},
"createdAt": "2026-07-28T08:55:32.000Z",
"updatedAt": "2026-07-28T09:10:18.000Z"
}
]
~~~
</ResponseExample>
## Errors
<AccordionGroup>
<Accordion title="401 Unauthorized" icon="lock">
The API key is missing, malformed, revoked, or invalid.
</Accordion>
<Accordion title="403 Forbidden" icon="shield-halved">
The API key does not include the `read` scope required for this route.
</Accordion>
<Accordion title="500 Internal Server Error" icon="triangle-exclamation">
Fini failed while loading Data Steps, for example when `toolId` is not a valid ID.
</Accordion>
</AccordionGroup>
## Related topics
- [Overview](/en/api-reference/actions-and-attributes.md)
- [API overview](/en/api-reference/overview.md)
- [Update external API call](/en/api-reference/update-data-step.md)
This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
External API calls

