Skip to content

Get an issuer onboarding

GET
/v1/issuer-onboardings/{onboardingId}
curl --request GET \
--url https://api.flashpi.com.ec/v1/issuer-onboardings/example \
--header 'Authorization: Bearer <token>'

Poll it while verifying (every few seconds; verification usually takes under a minute). An onboarding is deleted 30 days after it is completed, expires or is rejected, and then answers 404 not_found. Requires an account-scoped (global) API key with read_write access, of either mode: the certificate serves test and live documents.

onboardingId
required
string
Accept-Language
string

Language of error messages and of the localized texts of resources (SRI messages, failures, certificate rejections): Spanish when the entry with the highest q-value is es or es- plus a region (es-EC, es-419), English otherwise. Errors state it in Content-Language.

X-Correlation-Id
string
>= 1 characters <= 128 characters /^[A-Za-z0-9._:/+=-]{1,128}$/

Your own ID for the request (letters, digits and -_.:/+=), echoed back in the X-Correlation-Id response header and logged next to the request ID. An invalid value gets 400 invalid_correlation_id.

Media typeapplication/json

An issuer onboarding from a .p12: Flashpi verifies the certificate (verifying), then it is ready with the certificate’s facts, the RUC and, when the registry lookup is on, the SRI’s profile, or rejected. Completing it creates the issuer (or renews an existing one) with the certificate, which serves test and live. It expired if not completed within 6 days, and it is deleted 30 days after it ends.

object
id
required
string format: uuid
status
required
string
Allowed values: verifying ready rejected completed expired
expiresAt
required

When it expires unless completed.

string format: date-time
rejection
required
Any of:

Why the certificate was rejected (the certificate rejection codes).

object
code
required
string
message
required

In the language of Accept-Language (Spanish or English).

string
certificate
required
Any of:

Public facts of the verified certificate (no key material).

object
serialNumber
required
string
validFrom
required
string format: date-time
validTo
required
string format: date-time
issuingCa
required
Any of:

The Ecuadorian certification authority that issued the certificate.

object
code
required
string | null
displayName
required
string | null
holder
required

The certificate holder’s names.

object
commonName
required

Common name (CN): the holder’s name.

string | null
organization
required

Organization (O): usually the company of a legal representative.

string | null
identification
required

The identification the certificate carries: its RUC (rucSource certificate), or the holder’s cédula, from which Flashpi proposes the RUC cédula + 001 (rucSource cedula).

object
ruc
required
string | null
rucSource
required
string | null
Allowed values: certificate cedula
cedula
required
string | null
proposedRuc
required

The RUC to complete with: the certificate’s, or the holder’s cédula followed by 001.

string | null
rucNeedsConfirmation
required

Whether the customer must confirm (or type) the RUC: it did not come from the certificate itself. Then complete must send ruc.

boolean
existingIssuer
required
Any of:

The account’s issuer that already has this RUC: completing renews its certificate instead of creating an issuer.

object
id
required
string format: uuid
legalName
required
string
sri
required
Any of:

What the SRI’s public RUC registry said about the RUC (best effort). unavailable: it did not answer. disabled: Flashpi did not ask it (the lookup is off). In both cases profile is null and the customer fills in the tax profile. Warnings never block.

object
status
required
string
Allowed values: found not_found unavailable disabled
fetchedAt
required
string | null format: date-time
profile
required
Any of:

The taxpayer’s profile in the SRI’s public RUC registry, normalized. The registry gives flags only for special taxpayer and withholding agent: the resolution numbers are the customer’s to type.

object
legalName
required

Razón social.

string | null
tradeName
required

Nombre comercial.

string | null
taxpayerStatus
required

The RUC status as the SRI writes it.

string | null
keepsAccounting
required
boolean | null
specialTaxpayer
required
boolean | null
withholdingAgent
required
boolean | null
rimpeRegime
required

general: not in RIMPE. unknown: the SRI answer could not be mapped; the customer chooses.

string
Allowed values: entrepreneur popular_business general unknown
headOfficeAddress
required

The head office address.

string | null
warnings
required

inactive: the RUC is not ACTIVO; ghost and nonexistent_transactions: the SRI flags the taxpayer; head_office_closed: its head office establishment is closed.

Array<string>
Allowed values: inactive ghost nonexistent_transactions head_office_closed
prefill
required
Any of:

Values for the issuer’s tax profile: the SRI’s legal name first, else the certificate’s organization (companies) or common name (persons); the trade name, the head office address and the tax profile from the SRI when it answered (sri.status found), otherwise null. They are the customer’s to check and edit.

object
ruc
required
string | null
legalName
required
string | null
tradeName
required
string | null
headOfficeAddress
required
string | null
taxProfile
required

The tax profile to start from; null where nothing is known.

object
keepsAccounting
required
boolean | null
rimpeRegime
required

general means not in RIMPE (complete with rimpeRegime: null); null means unknown.

string | null
Allowed values: entrepreneur popular_business general
specialTaxpayer
required

The SRI says special taxpayer: ask for the resolution number.

boolean | null
withholdingAgent
required

The SRI says withholding agent: ask for the resolution number.

boolean | null
completed
required
Any of:

What completing it produced.

object
issuerId
required
string format: uuid
certificateId
required
string format: uuid
createdAt
required
string format: date-time
updatedAt
required
string format: date-time

Example

{
"status": "verifying",
"rejection": {
"code": "invalid_password",
"message": "The password does not open the .p12 file."
},
"certificate": {
"serialNumber": "4f2a9c01",
"issuingCa": {
"code": "SECURITY_DATA",
"displayName": "Security Data"
},
"holder": {
"commonName": "JUAN CARLOS PEREZ LOPEZ",
"organization": "SUPERMERCADOS LA PRADERA S.A."
},
"identification": {
"ruc": "1790012345001",
"rucSource": "certificate",
"cedula": "1712345678"
}
},
"proposedRuc": "1790012345001",
"existingIssuer": {
"legalName": "Supermercados La Pradera S.A."
},
"sri": {
"status": "found",
"profile": {
"taxpayerStatus": "ACTIVO",
"rimpeRegime": "entrepreneur"
},
"warnings": [
"inactive"
]
},
"prefill": {
"ruc": "1790012345001",
"taxProfile": {
"rimpeRegime": "entrepreneur"
}
}
}
X-Request-Id
string format: uuid

Flashpi’s ID of the request, a UUIDv7 (also requestId in errors). Include it when you contact support.

authentication_required: no Authorization: Bearer header. invalid_api_key: the key is malformed, unknown or revoked.

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}
WWW-Authenticate
string

RFC 6750 challenge: Bearer realm="flashpi", plus error="invalid_token" with invalid_api_key.

The API key cannot perform this operation: key_scope_mismatch, key_read_only or ip_not_allowed; or its account is suspended (account_suspended).

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}

Not_found

Media typeapplication/problem+json

RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.

object
type
required

URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.

string format: uri
title
required

Localized summary of the type.

string
status
required

HTTP status code.

number
detail
required

Localized explanation of this occurrence.

string
instance
required

Path of the request.

string
code
required

Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.

string
Allowed values: bad_request malformed_json invalid_correlation_id validation_failed authentication_required forbidden not_found method_not_allowed not_acceptable conflict payload_too_large unsupported_media_type rate_limited internal_error service_unavailable invalid_api_key key_scope_mismatch key_read_only ip_not_allowed invalid_idempotency_key idempotency_key_reused idempotency_key_in_progress issuer_already_exists establishment_already_exists emission_point_already_exists resource_in_use issuer_onboarding_not_ready issuer_onboarding_expired issuer_onboarding_completed issuer_onboarding_rejected total_mismatch sequential_already_used sequentials_exhausted document_schema_invalid document_too_large document_not_authorized ride_not_available email_recipient_missing email_already_queued email_resend_limit_reached account_email_limit_reached email_sending_paused test_recipient_not_allowed platform_email_limit_reached webhook_endpoint_disabled webhook_endpoint_already_verified webhook_endpoint_not_verified webhook_delivery_in_progress sandbox_not_enabled demo_issuer_quota_exceeded demo_issuer_unavailable account_suspended
errors
required

Field-level errors (may be empty).

Array<object>
object
field
required

Path of the invalid field.

string
code
required

Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.

string
Allowed values: required unknown_field invalid_type invalid_format invalid_option too_short too_long out_of_range invalid_value unsupported_character not_found invalid_decimal invalid_identification invalid_check_digit final_consumer_not_allowed not_in_force too_many_additional_fields reserved_name amount_mismatch future_date date_too_early date_too_late discount_exceeds_amount duplicate vat_required unsupported_tax rate_mismatch incompatible_issuer_profile url_not_allowed demo_issuer_test_only demo_issuer_sequential_not_allowed ruc_mismatch
message
required

Localized message.

string
requestId
required

Request ID (UUIDv7); include it when contacting support.

string
documentId

idempotency_key_reused: the document the Idempotency-Key already created.

string format: uuid
limit

The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).

integer
resetsAt

When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.

string format: date-time
rideStatus

ride_not_available: the status of the RIDE.

string
Allowed values: pending generated failed
documentStatus

document_not_authorized: the status of the document.

string
Allowed values: processing pending_sri authorized rejected failed voided
environment

email_sending_paused: the mode whose email sending is paused.

string
Allowed values: test live
expectedTotal

total_mismatch: the expectedTotal you sent.

string
computedTotal

total_mismatch: the total Flashpi computed.

string
key
additional properties
any

Example

{
"type": "https://flashpi.com.ec/docs/en/errors/validation_failed",
"title": "Validation failed",
"status": 422,
"detail": "One or more fields are invalid. See errors for details.",
"instance": "/v1/invoices",
"code": "validation_failed",
"errors": [
{
"field": "customer.id",
"code": "required",
"message": "This field is required."
}
],
"requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f",
"rideStatus": "pending",
"documentStatus": "processing",
"environment": "test",
"expectedTotal": "112.00",
"computedTotal": "111.99"
}