# Authentication Source: https://docs.skipcall.app/api-reference/api-documentation/authentication Learn how to authenticate your API requests using API keys All API requests require authentication using an API key. Include your API key in the `Authorization` header: ```shellscript theme={null} Authorization: Bearer YOUR_API_KEY ``` ## **Generate API Keys** Generate API keys in your [**Skipcall account settings**](https://web.withallo.com/settings/api). ## **Example Request** ```shellscript theme={null} curl -X GET "https://api-public.skipcall.app/v1/api/contacts" \ -H "Authorization: Bearer YOUR_API_KEY" ``` ## **Error Responses** If your API key is invalid or missing, you’ll receive a`401 Unauthorized`response: ```json theme={null} { "code": "API_KEY_INVALID", "details": null } ``` # Rate limits Source: https://docs.skipcall.app/api-reference/api-documentation/rate-limiting Understand API rate limits and how to handle them API requests are subject to rate limiting to ensure fair usage and system stability. ## Limits | PLAN | **LIMIT** | | ------------ | ----------- | | Starter | 100req/min | | Intermediate | 100req/min | | Expert | 1000req/min | ## # Get current API key info Source: https://docs.skipcall.app/api-reference/authentication/get-current-api-key-info https://api-public.skipcall.app/docs-json get /v1/me Returns information about the authenticated API key and organization # Get a call Source: https://docs.skipcall.app/api-reference/calls/get-a-call https://api-public.skipcall.app/docs-json get /v1/calls/{id} Returns a single call by ID. Returns 404 if the call is in a workspace outside the API key scope. # Get call recording Source: https://docs.skipcall.app/api-reference/calls/get-call-recording https://api-public.skipcall.app/docs-json get /v1/calls/{id}/recording Returns the recording metadata for a call. Returns 404 if the call is in a workspace outside the API key scope. # Get call transcription Source: https://docs.skipcall.app/api-reference/calls/get-call-transcription https://api-public.skipcall.app/docs-json get /v1/calls/{id}/transcription Returns the transcription for a call. Returns 404 if the call is in a workspace outside the API key scope. # List calls Source: https://docs.skipcall.app/api-reference/calls/list-calls https://api-public.skipcall.app/docs-json get /v1/calls Returns a paginated list of calls scoped to the workspaces accessible by the API key. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Create a contact Source: https://docs.skipcall.app/api-reference/contacts/create-a-contact https://api-public.skipcall.app/docs-json post /v1/contacts Creates a new contact in your organization # Delete a contact Source: https://docs.skipcall.app/api-reference/contacts/delete-a-contact https://api-public.skipcall.app/docs-json delete /v1/contacts/{id} Soft-deletes a contact. The contact can no longer be retrieved after deletion. Returns 404 if the contact is in a workspace outside the API key scope. # Get a contact Source: https://docs.skipcall.app/api-reference/contacts/get-a-contact https://api-public.skipcall.app/docs-json get /v1/contacts/{id} Returns a single contact by ID. Returns 404 if the contact is in a workspace outside the API key scope. # List contacts Source: https://docs.skipcall.app/api-reference/contacts/list-contacts https://api-public.skipcall.app/docs-json get /v1/contacts Returns a paginated list of contacts scoped to the workspaces accessible by the API key. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Update a contact Source: https://docs.skipcall.app/api-reference/contacts/update-a-contact https://api-public.skipcall.app/docs-json patch /v1/contacts/{id} Updates an existing contact. Only provided fields will be updated. Returns 404 if the contact is in a workspace outside the API key scope. # Create a custom field Source: https://docs.skipcall.app/api-reference/custom-fields/create-a-custom-field https://api-public.skipcall.app/docs-json post /v1/custom-fields Creates a new custom field in your organization. A stable `slug` is automatically generated from the `name` and returned in the response. The slug is immutable: renaming the custom field later will not change it. # Delete a custom field Source: https://docs.skipcall.app/api-reference/custom-fields/delete-a-custom-field https://api-public.skipcall.app/docs-json delete /v1/custom-fields/{id} Permanently deletes a custom field and all its associated values across contacts. Returns 404 if the custom field is in a workspace outside the API key scope. # Get a custom field Source: https://docs.skipcall.app/api-reference/custom-fields/get-a-custom-field https://api-public.skipcall.app/docs-json get /v1/custom-fields/{id} Returns a single custom field by ID. Returns 404 if the custom field is in a workspace outside the API key scope. # List custom fields Source: https://docs.skipcall.app/api-reference/custom-fields/list-custom-fields https://api-public.skipcall.app/docs-json get /v1/custom-fields Returns a paginated list of custom fields scoped to the workspaces accessible by the API key. Each custom field has a stable `slug` (immutable) and a human-readable `name` (editable). Use the `slug` as the key when setting custom field values on contacts. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Update a custom field Source: https://docs.skipcall.app/api-reference/custom-fields/update-a-custom-field https://api-public.skipcall.app/docs-json patch /v1/custom-fields/{id} Updates an existing custom field name. The `slug` is **not** modified by this operation — it remains stable for integrations. Returns 404 if the custom field is in a workspace outside the API key scope. # Health check endpoint Source: https://docs.skipcall.app/api-reference/health/health-check-endpoint https://api-public.skipcall.app/docs-json get /v1/health # Introduction Source: https://docs.skipcall.app/api-reference/introduction Get started with the Skipcall API to programmatically manage your data The Skipcall API provides programmatic access to your Skipcall account allowing you to retrieve calls and contacts. **"STARTER", "INTERMEDIATE"** or **"EXPERT"** subscription are required for API. Feel free to reach us out with our needs : [support@skipcall.io](mailto:support@skipcall.io) # Add contacts to a sequence Source: https://docs.skipcall.app/api-reference/sequences/add-contacts-to-a-sequence https://api-public.skipcall.app/docs-json post /v1/sequences/{id}/contacts Adds contacts to an existing sequence. Each item may optionally specify an `assignedToWorkspaceMembershipId` (a workspace membership id obtained via `GET /v1/workspaces/:id/members`). Items without `assignedToWorkspaceMembershipId` are auto-assigned via round-robin among the sequence assignees (least loaded first). Idempotent: duplicates, contacts already in the sequence, and contacts outside the sequence scope are silently ignored. Soft-deleted sequence-contacts are resurrected (their original assignee is preserved; an `assignedToWorkspaceMembershipId` in the body is ignored for resurrected rows). Returns 404 if the sequence is outside the API key scope. On concurrent requests for the same contact, the winner among competing `assignedToWorkspaceMembershipId` values is undefined; verify with GET /v1/sequences/:id/contacts. # Create a sequence Source: https://docs.skipcall.app/api-reference/sequences/create-a-sequence https://api-public.skipcall.app/docs-json post /v1/sequences Creates a new sequence. Use the /users endpoint to get organizationMembershipIds for assignedToIds and creatorId. # Get a sequence by ID Source: https://docs.skipcall.app/api-reference/sequences/get-a-sequence-by-id https://api-public.skipcall.app/docs-json get /v1/sequences/{id} Returns the details of a specific sequence. Returns 404 if the sequence is in a workspace outside the API key scope. # List contacts of a sequence Source: https://docs.skipcall.app/api-reference/sequences/list-contacts-of-a-sequence https://api-public.skipcall.app/docs-json get /v1/sequences/{id}/contacts Returns a paginated list of contacts in a sequence, enriched with their tags and call history within the sequence. Supports filtering by tag label and contact status. Returns 404 if the parent sequence is in a workspace outside the API key scope. # List sequences Source: https://docs.skipcall.app/api-reference/sequences/list-sequences https://api-public.skipcall.app/docs-json get /v1/sequences Returns a paginated list of sequences scoped to the workspaces accessible by the API key. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Remove contacts from a sequence Source: https://docs.skipcall.app/api-reference/sequences/remove-contacts-from-a-sequence https://api-public.skipcall.app/docs-json delete /v1/sequences/{id}/contacts Removes contacts from an existing sequence (soft-delete). Idempotent: contacts not in the sequence are silently ignored. Returns 404 if the sequence is outside the API key scope. # Get call duration statistics Source: https://docs.skipcall.app/api-reference/statistics/get-call-duration-statistics https://api-public.skipcall.app/docs-json get /v1/stats/calls Returns call count, average duration, and total duration. Can be filtered by sequence, user, date range, and workspace. Pass `workspaceId` to narrow to a single workspace within the API key scope. The legacy `teamId` parameter is still accepted but adds a `Deprecation: true` response header. # Get call status distribution Source: https://docs.skipcall.app/api-reference/statistics/get-call-status-distribution https://api-public.skipcall.app/docs-json get /v1/stats/status-repartition Returns the distribution of calls by status, plus count of contacts not yet called. Pass `workspaceId` to narrow to a single workspace within the API key scope. The legacy `teamId` parameter is still accepted but adds a `Deprecation: true` response header. # Get tag distribution Source: https://docs.skipcall.app/api-reference/statistics/get-tag-distribution https://api-public.skipcall.app/docs-json get /v1/stats/tag-repartition Returns the distribution of contacts by tags applied after calls. Pass `workspaceId` to narrow to a single workspace within the API key scope. The legacy `teamId` parameter is still accepted but adds a `Deprecation: true` response header. # Create a tag Source: https://docs.skipcall.app/api-reference/tags/create-a-tag https://api-public.skipcall.app/docs-json post /v1/tags Creates a new tag for use in sequences to qualify call results. # Delete a tag Source: https://docs.skipcall.app/api-reference/tags/delete-a-tag https://api-public.skipcall.app/docs-json delete /v1/tags/{id} Deletes a tag. Cannot delete the last success tag — at least one must remain per workspace. Returns 404 if the tag is in a workspace outside the API key scope. # Get a tag by ID Source: https://docs.skipcall.app/api-reference/tags/get-a-tag-by-id https://api-public.skipcall.app/docs-json get /v1/tags/{id} Returns the details of a specific tag. Returns 404 if the tag is in a workspace outside the API key scope. # List tags Source: https://docs.skipcall.app/api-reference/tags/list-tags https://api-public.skipcall.app/docs-json get /v1/tags Returns a paginated list of tags scoped to the workspaces accessible by the API key. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Update a tag Source: https://docs.skipcall.app/api-reference/tags/update-a-tag https://api-public.skipcall.app/docs-json patch /v1/tags/{id} Updates an existing tag. Only provided fields will be updated. Returns 404 if the tag is in a workspace outside the API key scope. # Get stats aggregated by team Source: https://docs.skipcall.app/api-reference/teams-deprecated-—-use-workspaces/get-stats-aggregated-by-team https://api-public.skipcall.app/docs-json get /v1/teams/stats **Deprecated** — Use GET /workspaces/stats instead. # List teams accessible by this API key Source: https://docs.skipcall.app/api-reference/teams-deprecated-—-use-workspaces/list-teams-accessible-by-this-api-key https://api-public.skipcall.app/docs-json get /v1/teams **Deprecated** — Use GET /workspaces instead. # List organization users Source: https://docs.skipcall.app/api-reference/users/list-organization-users https://api-public.skipcall.app/docs-json get /v1/users Returns a paginated list of users (organization members) who have access to at least one of the workspaces accessible by the API key. Use the `organizationMembershipId` to create sequences. Use the `workspaceIds` query parameter to narrow results to a subset of those workspaces. # Get stats aggregated by workspace Source: https://docs.skipcall.app/api-reference/workspaces/get-stats-aggregated-by-workspace https://api-public.skipcall.app/docs-json get /v1/workspaces/stats Returns call, contact, and sequence stats per workspace. Scope is limited to the API key's accessible workspaces. # List members of a workspace Source: https://docs.skipcall.app/api-reference/workspaces/list-members-of-a-workspace https://api-public.skipcall.app/docs-json get /v1/workspaces/{id}/members Returns paginated members of a workspace. Each item exposes a workspace membership id (`id` field) usable as `assignedToWorkspaceMembershipId` when adding contacts to a sequence in this workspace. Includes members of every status; filter to ACTIVE if needed. Excludes pending workspace invitations that have no organization membership yet. # List workspaces accessible by this API key Source: https://docs.skipcall.app/api-reference/workspaces/list-workspaces-accessible-by-this-api-key https://api-public.skipcall.app/docs-json get /v1/workspaces Returns all workspaces within the scope of the API key.