verify-signup-request
dci verify-signup-request <signupRequestId> [body]
Confirms ownership of the admin email by entering the 6-digit code that was emailed when the request was created (or resent). Success records consent and starts provisioning; the request moves to consented and then completed. Five wrong codes lock the current code; request a new one with resendSignupVerification.
signupRequestId— Public signup request id (sr_ prefix).
Pass the request body as name: value arguments or pipe JSON on stdin — see Command structure.
Request
Content-Type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
code | string | yes | The 6-digit code from the verification email. |
Raw JSON schema
{
"type": "object",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"minLength": 6,
"maxLength": 6,
"pattern": "^[0-9]{6}$",
"description": "The 6-digit code from the verification email."
}
}
}
Output
OK - the request is consented (or already past that point).
By default dci renders the result as a table. Use --output json to get the full structure described below — see Output formats.
| Field | Type | Description |
|---|---|---|
id | string | Public request id (sr_ prefix); an unguessable capability. |
status | string | One of: "pending_consent", "consented", "provisioning", "completed", "rejected", "expired", "failed". |
channel | string | One of: "agent", "console", "web". |
companyName | string | Company name supplied at signup; shown on the console verification and completion pages. |
consentUrl | string (uri) | Page where the organization's admin verifies the request (pending_consent only). |
verification | object | Present while the request awaits the emailed code. |
verification.required | boolean | |
verification.expiresAt | string (date-time) | |
verification.resendAfterSeconds | integer | |
verification.sendsRemaining | integer | |
expiresAt | string (date-time) | When an unverified request expires (pending_consent only). |
pollAfterSeconds | integer | Suggested polling interval while the request is not terminal. |
customerId | string | The provisioned tenant (completed only). |
consoleUrl | string (uri) | |
signInUrl | string (uri) | Page where the admin signs into the new tenant (completed only). |
tier | string | Trial tier name (trial). |
trialEndDate | string (date-time) | |
nextSteps | array of string | |
reason | object | Why a terminal request did not complete. |
reason.code | string | |
reason.detail | string | |
reason.retryable | boolean |
Raw JSON schema
{
"type": "object",
"description": "Redacted public view of a signup request. Never includes the admin email, the verification code or the idempotency key.",
"required": [
"id",
"status"
],
"properties": {
"id": {
"type": "string",
"description": "Public request id (sr_ prefix); an unguessable capability."
},
"status": {
"type": "string",
"enum": [
"pending_consent",
"consented",
"provisioning",
"completed",
"rejected",
"expired",
"failed"
]
},
"channel": {
"type": "string",
"enum": [
"agent",
"console",
"web"
]
},
"companyName": {
"type": "string",
"description": "Company name supplied at signup; shown on the console verification and completion pages."
},
"consentUrl": {
"type": "string",
"format": "uri",
"description": "Page where the organization's admin verifies the request (pending_consent only)."
},
"verification": {
"type": "object",
"description": "Present while the request awaits the emailed code.",
"properties": {
"required": {
"type": "boolean"
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"resendAfterSeconds": {
"type": "integer"
},
"sendsRemaining": {
"type": "integer"
}
}
},
"expiresAt": {
"type": "string",
"format": "date-time",
"description": "When an unverified request expires (pending_consent only)."
},
"pollAfterSeconds": {
"type": "integer",
"description": "Suggested polling interval while the request is not terminal."
},
"customerId": {
"type": "string",
"description": "The provisioned tenant (completed only)."
},
"consoleUrl": {
"type": "string",
"format": "uri"
},
"signInUrl": {
"type": "string",
"format": "uri",
"description": "Page where the admin signs into the new tenant (completed only)."
},
"tier": {
"type": "string",
"description": "Trial tier name (trial)."
},
"trialEndDate": {
"type": "string",
"format": "date-time"
},
"nextSteps": {
"type": "array",
"items": {
"type": "string"
}
},
"reason": {
"type": "object",
"description": "Why a terminal request did not complete.",
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"retryable": {
"type": "boolean"
}
}
}
}
}
Errors
On failure, dci prints a single error message — with a hint when one is available — and exits with a typed code your scripts can branch on. See Errors and exit codes for the full contract.
HTTP status to exit code mapping
| HTTP status | Exit code | Error code | Meaning |
|---|---|---|---|
| 400 | 30 | VALIDATION_ERROR | The arguments or request body were rejected. Review the command's flags and payload. |
| 404 | 20 | RESOURCE_NOT_FOUND | The requested resource does not exist. Check the identifier argument. |
| 409 | 21 | RESOURCE_CONFLICT | The operation conflicts with the resource's current state. |
| 429 | 50 | RATE_LIMITED | Too many requests. Retryable — the CLI reports the server-provided delay. |
Related
- create-signup-request — Create a signup request
- get-signup-request — Get a signup request
- resend-signup-verification — Resend the verification code
- API reference: POST /signup/v1/requests/{signupRequestId}/verify
Aliases: verifysignuprequest