Get what a registration needs
/v1/compliance/requirementsconst requirement = await bird.complianceRequirements.get({
subject_kind: "number",
subject_id: "nda_01krdgeqcxet5s7t44vh8rt9mg",
country_code: "US",
});
for (const field of requirement.fields ?? []) {
console.log(field.key, field.state);
}requirement = client.compliance_requirements.get(
subject_kind="number",
subject_id="nda_01krdgeqcxet5s7t44vh8rt9mg",
country_code="US",
)
for field in requirement.fields or []:
print(field.key, field.state)req, err := client.ComplianceRequirements.Get(context.Background(), bird.ComplianceRequirementsGetParams{
SubjectKind: "number",
SubjectID: "nda_01krdgeqcxet5s7t44vh8rt9mg",
CountryCode: "US",
})
if err != nil {
log.Fatal(err)
}
for _, f := range *req.Fields {
fmt.Println(*f.Key, *f.State)
}$requirement = $bird->complianceRequirements->get([
'subject_kind' => 'number',
'subject_id' => 'nda_01krdgeqcxet5s7t44vh8rt9mg',
'country_code' => 'US',
]);
foreach ($requirement->getFields() ?? [] as $field) {
echo $field->getKey(), ' ', $field->getState(), "\n";
}bird compliance requirementscurl -X GET "https://us1.platform.bird.com/v1/compliance/requirements" \
-H "Authorization: Bearer $TOKEN" \
--url-query "country_code=US"{
"next": [
{
"kind": "operation"
}
],
"subject_kind": "sms_sender",
"subject_id": "scr_01krdgeqcxet5s7t44vh8rt9mg",
"program": "alpha",
"country_code": "US",
"submission_id": "csb_01krdgeqcxet5s7t44vh8rt9mg",
"obligation": {
"reason": "policy_change",
"state": "open"
},
"fields": [
{
"data_type": "string",
"attachment_id": "tca_01krdgeqcxet5s7t44vh8rt9mg",
"attachment_ids": [
"tca_01krdgeqcxet5s7t44vh8rt9mg"
],
"state": "not_supplied"
}
]
}
Returns everything a country requires before a registration can be approved, in the order to present it, along with what you have already supplied and where each item stands.
Everything you need to answer an item comes back with it. That covers the accepted values
where an item takes a fixed set, the constraints a value must satisfy, and guidance on what
a good answer looks like. Items that take a document say so, and some offer a blank form to download and
complete. An unsupported country returns 422 rather than an empty result.
This answers one country for one registration you already hold. Omit subject_id and it
answers the form alone, unanswered: every requirement reads not_supplied, nothing is
satisfied, and there is no submission behind it, which is the state a registration you
have not started is in anyway. Reading it that way needs program, since the coordinate
is otherwise resolved from the registration.
For a number you hold, pass its ID from GET /v1/numbers as subject_id. For an SMS sender,
call GET /v1/sms/senders/{sender_id}/requirements and pass a row's registration_id as
subject_id.
Query Parameters
subject_kindstringWhat you are registering.
Possible values: sms_sender, number, identity
subject_idstringThe registration to answer for. Omit it to read the form on its own, before you hold anything to register: the requirements come back unanswered, which is what to do when you are deciding whether to take a number or a sender on in the first place. Omitting it makes program required, since the coordinate is otherwise resolved from the subject. When you do supply it, it is an scr_ id when subject_kind is sms_sender, an nda_ id when it is number, and a cid_ party id when it is identity.
country_codestringThe destination country. For identity send ZZ, the international coordinate: your business registers once, not per country.
programstringThe programme to read. Optional alongside subject_id, because a registration is under exactly one programme and that is the one used; supply it there only to confirm the programme you expect, since one that is not the registration's own returns a 422, as does supplying one at all for a country that runs no registration programme. Required when subject_id is omitted, because there is then no registration to resolve it from and a country can run more than one.
Possible values (may grow over time): alpha, numeric, mobile, local, national, short_code, short_code_fteu, toll_free, business
identity_idstringPrefill the business details from a party you have already described. Requirements that ask about the party come back carrying its answers, marked prefilled; requirements about this sender never prefill because you write the sender's intended use fresh each time. Anything you have already filed for this registration wins over the party's answer.
Response Payload
nextWhat to do next about this country's requirements, given the state it is in. Each entry names one action and says why it is worth taking, so you can act on this response without working out the order yourself. Present on reads that compute it: an empty list means there is nothing to do, and the field is absent entirely on responses that do not report next actions.
Whether anything is asked of you is needs_input, and this says what to do about it: send your
answers where none have been filed, or replace the ones that were refused. Which items those
are, and why each was refused, is on the item in fields. For feedback about the
whole submission, read reason and general_reasons and update the details that need correction.
subject_kindsubject_idThe registration these requirements are for, the same one you asked about. null when you asked without one, which is how a form read on its own says it is answering for nothing yet.
programThe registration program these requirements belong to. null when the country runs no registration program at all, in which case nothing is required and the field list is empty.
country_codesatisfiedWhether this country's requirements are met. true when no requirements apply, or once the submission is approved and every required requirement is approved or marked not applicable. This can remain true when an external verifier requests a correction. Once you submit that correction, it must pass review before this becomes true again, including any optional answers you change.
needs_inputWhether anything is waiting on you. True when a required requirement has no answer, its answer was refused or has gone stale, or the registration needs correction as described by reason. False does not imply that review is pending: a closed verifier correction can leave the requirements unsatisfied with no editable answers. Read review_pending to determine whether an answer is awaiting review. Read this independently of satisfied, which reports whether your paperwork is accepted. An unresolved verifier correction also sets it while the matching grant is live and the correction deadline has not passed, until you supply updated details. At the deadline or after grant withdrawal, an unresolved rejection alone does not set it because accepted answers can no longer be replaced. A corrected optional answer that is rejected or expires still needs your input through ordinary resupply, including after that deadline.
review_pendingWhether any submitted answer is awaiting or undergoing review. False after all answers have received verdicts. A closed verifier correction can remain unsatisfied with no review pending and no editable answers.
reasonWhat to correct about the registration as a whole, or null when no registration-wide correction is requested. Reasons about individual answers are on the entries in fields.
guidanceWhat this country expects of you before and while you fill in the form, written by Bird's compliance team. It may point you to a registration you must complete elsewhere first. null when the form needs no introduction, or when no program applies.
submission_idThe submission carrying your answers, once you have made one. null before that.
obligationWhat this registration has to do to keep sending, and by when. Null when nothing is outstanding. An obligation does not stop you sending: the registration stays authorised until the date passes, and supplying what is asked for before then closes it with no interruption.
Show child attributes
obligation.reasonobligation.stateobligation.due_atThe date to supply this by. Where more time has been given, this is the later date rather than the one first asked for.
obligation.target_versionThe version of the country's form your answers have to reach. For an expiry it is the version you already answered, filled in again.
general_reasonsFeedback about the submission as a whole from an external verifier. It can remain visible while corrections are under review. Empty when no unresolved verifier feedback applies. On requirements responses, read needs_input to determine whether action is needed and editable_for_verifier_repair on each field to determine whether an approved or not-applicable answer can be replaced.
fieldsEvery requirement for this country, in the order to present them.
closed_atWhen the submission for these requirements was closed. Null while open or not yet submitted.
Related resources
Continue with the documentation, guides and examples for this topic.