Supported Countries: The Compliance API currently supports India only. Support for additional countries will be added in future releases.
The Requirements Object
Describes what documents and fields are needed for compliance in a specific country, number type, and user type combination. Always call this first before creating a compliance application.Attributes
UUID of the compliance requirement.
ISO 3166-1 alpha-2 country code.
Type of number. Values:
local, mobile, tollfree.Type of end user. Values:
individual, business.List of required document types. Each object includes
document_type_id, name, description, proof_required, and required_fields.Document Type Object
Each entry indocument_types:
UUID of the document type. Use this when creating a compliance application.
Document type name (e.g., “Registration Certificate”).
Description of the document type.
true = file upload required, false = only data fields needed.Data fields required for this document type.
Required Field Object
Each entry inrequired_fields:
Key to use in
documents[].data_fields.Human-readable display name.
Guidance on what to enter.
Values:
string, date, enum.Whether this field is mandatory.
Expected format (e.g.,
yyyy-mm-dd). Empty if none.Comma-separated allowed values for enum fields. Empty for other types.
Minimum character length.
Maximum character length.
Get Requirements
Query compliance requirements before creating a compliance record.Query Parameters
Two-letter country code (e.g.,
IN).Values:
local, mobile, tollfree.Values:
individual, business.Example
Response (200 OK)
The Compliance Object
Represents a compliance application combining end user information and documents for regulatory review.Attributes
UUID identifier.
Friendly name for the compliance record.
Current status. Values:
submitted, accepted, rejected.ISO 3166-1 alpha-2 country code.
Type of number.
Values:
individual, business.Reason for rejection (only when
status=rejected, null otherwise).ISO 8601 timestamp.
ISO 8601 timestamp.
End user details (only returned with
expand=end_user).Attached documents (only returned with
expand=documents).Linked phone numbers (only returned with
expand=linked_numbers).End User Object
Returned when usingexpand=end_user.
UUID of the end user.
Values:
individual, business.Full name or company name.
Last name (empty for business).
Contact email.
Street address line 1.
Street address line 2.
City.
State or province.
Postal or ZIP code.
Two-letter country code.
Business registration number (e.g., CIN for India).
Address fields are flat (e.g.,
address_line1, city), not nested under an address object.Document Object
Returned when usingexpand=documents.
UUID of the document.
UUID of the document type.
Document type name.
Original filename (empty if no file uploaded).
Key-value pairs submitted with the document.
Presigned S3 URL (expires in 1 hour). Empty if no file.
ISO 8601 timestamp.
Linked Number Object
Returned when usingexpand=linked_numbers.
Phone number in E.164 format.
Type of number.
Create a Compliance Application
Create end user, upload documents, and auto-submit the compliance application in a single call.multipart/form-data
The request consists of:
- A
datafield containing a JSON string with compliance details - File fields using the pattern
documents[0].file,documents[1].file, etc.
File Upload Rules
- Required when the document type has
proof_required=true(from Requirements response) - Not needed when
proof_required=false - Supported formats: PDF, JPEG, PNG (validated server-side by content type, not just extension)
- Max file size: 5 MB per file
- Max filename length: 99 characters
The data JSON Structure
Two-letter country code.
Values:
local, mobile, tollfree.Friendly name (unique per end user, max 99 characters).
End user details.
Array of document objects.
Values:
individual, business.Full name or company name.
Last name.
Contact email.
Street address line 1.
Street address line 2.
City.
State or province.
Postal or ZIP code.
Two-letter country code.
Business registration number.
UUID from the Requirements response.
Key-value pairs matching
required_fields[].field_name from Requirements.Example
Response (201 Created)
Get a Compliance Application
Retrieve details of a specific compliance application.Query Parameters
Comma-separated list of objects to include. Values:
end_user, documents, linked_numbers.expand, only top-level fields are returned (faster response). With expand, the corresponding nested objects are included.
Example
Response (200 OK)
List Compliance Applications
Returns a paginated list of compliance applications for the account.Query Parameters
Max results per page (max 100). Default: 20.
Pagination offset. Default: 0.
Filter by status. Values:
submitted, accepted, rejected.Filter by country code (e.g.,
IN).Filter by number type. Values:
local, mobile, tollfree.Filter by user type. Values:
individual, business.Filter by alias.
Comma-separated:
end_user, documents, linked_numbers.Example
Response (200 OK)
Update a Compliance Application
Update a rejected compliance application and automatically resubmit it for review.multipart/form-data (same format as Create)
Restrictions
- Only applications with
status=rejectedcan be updated. Any other status returns error codecompliance_not_editable. end_user.typecannot be changed.- Documents are fully replaced. All previously uploaded documents are removed and new ones are created. You must re-upload all documents, not just the ones that need correction.
Arguments
Updated friendly name (max 99 characters).
Partial end user update (same fields as Create, minus
type).Full replacement document set.
Example
Response (202 Accepted)
Returns the updated compliance object withstatus: "submitted".
Delete a Compliance Application
Soft-delete a compliance application.Restrictions
- Applications with
status=expiredcannot be deleted. - All other statuses (
submitted,accepted,rejected) can be deleted.
Example
Response
204 No Content (no response body)
Bulk Link Numbers to Compliance
Link multiple phone numbers to their respective compliance applications in a single request.application/json
Requirements
- Compliance application must be in
acceptedstatus - Phone number country and type must match the compliance requirement
- Application must use the latest requirement version
Arguments
Array of number-to-compliance mappings.
Phone number in E.164 format.
UUID of an
accepted compliance application.Example
Response (200 OK)
Status Flow
| Status | Description | Available Actions |
|---|---|---|
submitted | Under review by compliance team | Get, List, Delete |
accepted | Approved. Phone numbers can be linked | Get, List, Delete, Bulk Link |
rejected | Not accepted. Check rejection_reason | Get, List, Delete, Update (auto-resubmits) |
The
draft, suspended, and expired statuses exist internally but are not settable via the public API.Error Handling
Error Response Format
Error category.
Machine-readable error code.
Human-readable description.
Request field that caused the error (omitted for non-field errors).
Error Types
| Type | Description |
|---|---|
validation_error | Request validation failed |
not_found | Resource does not exist |
invalid_request | Request cannot be completed (duplicates, restrictions) |
state_error | Action not allowed in the current compliance status |
forbidden | Account not permitted |
server_error | Internal error |
Error Codes
| Code | Type | Description |
|---|---|---|
missing_required_field | validation_error | Required field not provided |
invalid_field_value | validation_error | Field value is invalid or exceeds limits |
missing_required_document | validation_error | Required document type not included |
invalid_file | validation_error | Unsupported file format or exceeds 5 MB |
duplicate_alias | invalid_request | Alias already in use for this end user |
duplicate_end_user | invalid_request | End user with same name, last name, and type exists |
compliance_not_editable | state_error | Only rejected applications can be updated |
requirement_restricted | invalid_request | Phone numbers for this country/type are restricted |
requirement_not_found | not_found | No requirement for the given country/number type/user type |
not_found | not_found | Compliance application not found |
expired | invalid_request | Cannot delete an expired application |
HTTP Status Codes
| Code | Meaning |
|---|---|
200 | Success (Get, List, Bulk Link) |
201 | Created (Create) |
202 | Accepted (Update, resubmitted for review) |
204 | No Content (Delete) |
400 | Validation or state error |
401 | Authentication failed |
403 | Forbidden |
404 | Not found |
429 | Too Many Requests (rate limited) |
500 | Internal server error |
Rate Limits
| Endpoint | Rate Limit |
|---|---|
| Requirements Discovery | 100 requests/minute |
| Compliance Operations | 60 requests/minute |
India Requirements
For Indian local business numbers (country_iso=IN, number_type=local, user_type=business), the following documents are required:
1. Registration Certificate (file upload required)
Certificate of Incorporation issued by the Ministry of Corporate Affairs (MCA). Udyam Registration Certificates are also accepted for MSMEs. Required data field:business_name — legal business name exactly as it appears on the certificate.
2. GST Registration Certificate (file upload required)
Form GST REG-06 issued by the Goods and Services Tax Network (GSTN). No additional data fields required.Validation Rules
- The business name must match exactly across both documents and the
end_user.name/business_namedata field - Both documents must be valid and not expired
- Documents must be clear, legible PDFs or images
- Submitting the same file for both document slots will be rejected
Related
- Regulatory Compliance - Overview and Console guide
- Phone Numbers - Search and buy numbers
- Account Phone Numbers - Manage your numbers