Salt Edge PSD2 Compliance Logo

V2

Funds Confirmations

Tokens

Create an access token for confirmation of funds consent. As a result, Connector should send a success, update or fail callback to Salt Edge PSD2 Compliance with result of the operation, be it success, fail or request for additional steps.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7InByb3ZpZGVyX2NvZGUiOjIxLCJjbGllbnRfaWQiOjEsInJlZGlyZWN0X3VybCI6Imh0dHBzOi8vcHJpb3JhLWRlbW8uc2FsdGVkZ2UuY29tL2Jlcmxpbmdyb3VwL3BpaXMvNSIsImFwcF9uYW1lIjoiUHJpb3JhIERlbW8gUFJPRFVDVElPTiIsImF1dGhvcml6YXRpb25fdHlwZSI6Im9hdXRoIiwiYWNjb3VudCI6eyJjdXJyZW5jeSI6IkVVUiIsImliYW4iOiJERTIzMTAwMTAwMTAxMjM0NTY3ODkiLCJiYmFuIjoiNTM5MCAwNzU0IDcwMzQiLCJwYW4iOiIxMjM0MTIzNDEyMzQxMjM0IiwibWFza2VkX3BhbiI6IjEyMzQ1Nnh4eHh4eDEyMzQiLCJtc2lzZG4iOiI0NDc5MTIzNDU2NzgiLCJiYW5rX2FjY291bnRfaWRlbnRpZmllciI6IjEyMzQxMjM0MTIzNCJ9LCJjYXJkX251bWJlciI6IjEyMzQxMjM0MTIzNDEyMzQiLCJjYXJkX2V4cGlyeV9kYXRlIjoiIDIwMTktMDgtMjEiLCJjYXJkX2luZm9ybWF0aW9uIjoiY2FyZCBpbmZvcm1hdGlvbiIsInJlZ2lzdHJhdGlvbl9pbmZvcm1hdGlvbiI6InJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiIsInNlc3Npb25fc2VjcmV0IjoiYTA3MmY3NzYtOGFiNi02ZjYxLWIwZmQtZmJjOWJiM2ZhMDY3In0sImV4cCI6MTcxNjA3NzIyNX0.A7TaOtja_A57C7XU8YcWMCFB-iGV-tOgxXttzYMvTPrSv1mOsX1yYGKjPfGPfe0viklmLcRLks4YsZMO7jg9XADvB-oXG6eyzauV-bz0Sl2TCP75uozE6L47n64QYn1uP3GU0DOpbEGymysQBF6cMhd6_CBP3hNedte8Cy_NFVPYAU4QUIB7kxwYGo8XuG-CZAg9YBMwWcqA7B1439Hw2QJsuui0EVd7aQCbWEOyxwomusZasFZy8ePWVImXpaWjkmEs2YaaH9FtFfSFqhomXISsyrfyUcsikJesSuCUrejFTphBlE-_86F2pChxJuAJNIGix74b24JyO9n81fU5qg" \ 
 -H "Accept: application/json" \ 
 -H "Content-Type: application/json" \ 
 -H "Client-Id: 552" \ 
 -X POST "https://your.connector.url/api/priora/v2/funds_confirmations/tokens"

Example of request parameters

{"data":{"provider_code":21,"client_id":1,"redirect_url":"https://priora-demo.saltedge.com/berlingroup/piis/5","app_name":"Priora Demo PRODUCTION","authorization_type":"oauth","account":{"currency":"EUR","iban":"DE2310010010123456789","bban":"5390 0754 7034","pan":"1234123412341234","masked_pan":"123456xxxxxx1234","msisdn":"447912345678","bank_account_identifier":"123412341234"},"card_number":"1234123412341234","card_expiry_date":" 2019-08-21","card_information":"card information","registration_information":"registration information","session_secret":"a072f776-8ab6-6f61-b0fd-fbc9bb3fa067"},"exp":1574093209}
Request

POST https://your.connector.url/api/priora/v2/funds_confirmations/tokens

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key.
Accept string, required Media type that is acceptable for the response. Allowed values: application/json
Content-Type string, required The media type of the body of the request. Allowed values: application/json
Client-Id integer, required TPP application identifier in Salt Edge PSD2 Compliance.
Psu-Device-ID string, optional UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID need to be unaltered until removal from device.
Psu-User-Agent string, optional The forwarded Agent header field of the HTTP request between PSU and TPP, if available.
Psu-Geo-Location string, optional The forwarded Geo Location of the corresponding HTTP request between PSU and TPP if available.
Unpacked Request Authorization
exp
integer, required
The lifetime of the request in timestamp UTC format. Values greater than: Current time.
Response headers
Header Type Description
Retry-After integer, optional Amount of time in seconds after which Salt Edge PSD2 Compliance Solution resends the previously failed request.
Response

Upon successful request, 200 status code should be returned.


Delete

Revoke an already existing and active access token.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7InByb3ZpZGVyX2NvZGUiOiJkZW1vYmFuayIsInNlc3Npb25fc2VjcmV0IjoiaDI5Yzk0MVBRNF9rNl82UG4tbzUifSwiZXhwIjoxNzE2MDc3MjI3fQ.ZLBRqbiRASdLnqvA7s7s9nOASmexeZRkGOzgpE-Ctsn3lsFb9bYDWr9ISAsyJE6mJSQVf8A9mq8hZAsIk1EjxI2SYQ_xActRBWIJ1nQsx9sM4_OBOC-ubF9CMkpTYAhxH8MObW-j9xpJgmFFpKww_dp01l-Gw3jITSzOCblu12fqC2XyjYAB8eCFOVvPraMbTFFAurpaTZcpoVuduybL6RAChurZ9WgKbEl5sQGPGmOuZ9XBvc8ZqWwkkVsL_mh5yoCmoMmQCF7x0WHTPeLHQJ-Hpbayj6wu3AWuOS91lyh5NH46v6QAsM_VMMHvH7YQ0COJGm0xcKfZmNSUKv3mPA" \ 
 -H "Access-Token: 65adc909f5676f3902787ecb6f379c1c48bfc18a222157713808274b100b9e255f7b4b59a3ecd7689cb2abe26f8705dfd89b7a0cc9e9a07a587dc64a7c4572ad" \ 
 -H "Accept: application/json" \ 
 -H "Content-Type: application/json" \ 
 -H "Client-Id: 843" \ 
 -X DELETE "https://your.connector.url/api/priora/v2/funds_confirmations/tokens"

Example of request parameters

{"data":{"provider_code":"demobank","session_secret":"h29c941PQ4_k6_6Pn-o5"},"exp":1574093209}
Request

DELETE https://your.connector.url/api/priora/v2/funds_confirmations/tokens

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key.
Access-Token string, required The token which is created by a connector as a result of successful authentication.
Accept string, required Media type that is acceptable for the response. Allowed values: application/json
Content-Type string, required The media type of the body of the request. Allowed values: application/json
Client-Id integer, required TPP application identifier in Salt Edge PSD2 Compliance.
Psu-Device-ID string, optional UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID need to be unaltered until removal from device.
Psu-User-Agent string, optional The forwarded Agent header field of the HTTP request between PSU and TPP, if available.
Psu-Geo-Location string, optional The forwarded Geo Location of the corresponding HTTP request between PSU and TPP if available.
Unpacked Request Authorization
exp
integer, required
The lifetime of the request in timestamp UTC format. Values greater than: Current time.
Response headers
Header Type Description
Retry-After integer, optional Amount of time in seconds after which Salt Edge PSD2 Compliance Solution resends the previously failed request.
Response

Upon successful request, 200 status code with an empty JSON "{}" should be returned.


Check Funds

Checks whether a specific amount is available at point of time of the request on an account addressed by IBAN or other available identifiers.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7ImNsaWVudF9pZCI6Miwic2Vzc2lvbl9zZWNyZXQiOiJhWE1nWm1GcGJIVnlaU0IwYnlCamIyMXRkVzVwWTJGMFpRMEsiLCJhY2NvdW50Ijp7ImN1cnJlbmN5IjoiVVNEIiwibWFza2VkX3BhbiI6IioqKioqKioqKioqKjMyNDEiLCJpYmFuIjoiREUyMzEwMDEyMDAyMDEyMzQ1Njc4OSIsImJiYW4iOiI1MzkwMDc1NDcwMzQiLCJiaWMiOiJCQVJDR0IyMlhYWCIsImJhbmtfYWNjb3VudF9pZGVudGlmaWVyIjoiMTIzNDEyMzQxMjM0In0sImluc3RydWN0ZWRfYW1vdW50Ijp7ImFtb3VudCI6Ijg3IiwiY3VycmVuY3kiOiJVU0QifSwiY2FyZF9udW1iZXIiOiIxMjM0MTIzNDEyMzQxMjM0IiwicHJvdmlkZXJfY29kZSI6MjF9LCJleHAiOjE3MTYwNzcyMjh9.Lw8cSNYuxECtrcJyTfiYqn_FlqYnfTXpL5K8nWb7sQUOktelw1-8l1BkRUZz2S5uUK9DPiqIY0MnVgTddA2yNWuSlWPoSxjWa25yuBGspO4kfZS3zndCvp4TYW5YOMHgmqBQyPQpTkEcHU-NS7uyNcoavcBYN4BzIgY5Kc0tmqloTXCJO8eW6N0KMhJpkmUIe7sEH9t72vHiN3B24q8OZuJVz0lr42e9xfwsQWNZex7AvhPMjsAhcwxkgdqmT5iFyrTlUAswfw6jFg9PnTK5UlO5i94Qc4AIpPl9RC1uLhZX1I3dSmEThaMKo-SQ2kMLRdjFDHGT8q3CcdF_NPK7ww" \ 
 -H "Access-Token: aXMgZmFpbHVyZSB0byBjb21tdW5pY2F0ZQ0K" \ 
 -H "Accept: application/json" \ 
 -H "Content-Type: application/json" \ 
 -H "Client-Id: 843" \ 
 -X POST "https://your.connector.url/api/priora/v2/funds_confirmations"

Example of request parameters

{"data":{"client_id":2,"session_secret":"aXMgZmFpbHVyZSB0byBjb21tdW5pY2F0ZQ0K","account":{"currency":"USD","masked_pan":"************3241","iban":"DE23100120020123456789","bban":"539007547034","bic":"BARCGB22XXX","bank_account_identifier":"123412341234"},"instructed_amount":{"amount":"87","currency":"USD"},"card_number":"1234123412341234","provider_code":21},"exp":1571232332}

Example of response

Request

POST https://your.connector.url/api/priora/v2/funds_confirmations

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key.
Access-Token string, required The token which is created by a connector as a result of successful authentication.
Accept string, required Media type that is acceptable for the response. Allowed values: application/json
Content-Type string, required The media type of the body of the request. Allowed values: application/json
Client-Id integer, required TPP application identifier in Salt Edge PSD2 Compliance.
Psu-Device-ID string, optional UUID (Universally Unique Identifier) for a device, which is used by the PSU, if available. UUID identifies either a device or a device dependant application installation. In case of an installation identification this ID need to be unaltered until removal from device.
Psu-User-Agent string, optional The forwarded Agent header field of the HTTP request between PSU and TPP, if available.
Psu-Geo-Location string, optional The forwarded Geo Location of the corresponding HTTP request between PSU and TPP if available.
Unpacked Request Authorization
exp
integer, required
The lifetime of the request in timestamp UTC format. Values greater than: Current time.
Response headers
Header Type Description
Retry-After integer, optional Amount of time in seconds after which Salt Edge PSD2 Compliance Solution resends the previously failed request.
Response

Upon successful request, 200 status code should be returned.


Related Errors
Class Code Description
ResourceUnknown 404 The addressed resource is unknown relative to the TPP

Sessions

Session Callback Endpoints are responsible for assuring communication between ASPSP and TPP, where ASPSP notifies about its Redirect SCA authorisation page and if the authorisation process is successful or failed.

Success

Success callback should be sent to Salt Edge PSD2 Compliance when all required verification steps have been passed, and therefore access is granted.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7InVzZXJfaWQiOjEsInNlc3Npb25fc2VjcmV0IjoiQlZ1dmVTTFFDckE1akJZVXl4WGUifSwiZXhwIjoxNzE2MDc3MjI5fQ.bwV74Ylb5W6mLTlepzIQ2_JWl5t6jHpspp62PQclt_U402obm47A_lTtG7-jdk2kNrlM5KneGDX5JbUBh9nub4GHqvhXWF6OatCdCHR6zDB0BH1NETubySQT8Z3cTVzEsrJGpsVLeU45l-UB6pSRuVNhxY-vMxqj011KAsmYSgtGBobvC1yuTJOfoxLzrLSEkTKVU87uqnlQCJW9kij2zx9O1WdP8M-RIxVZmd9t1ouzI2iTOwKJiX5L7i4Na-WhLZuoDLKNB3Lut2-dDa_b6G2Pcc1L7dJShO-RHHCrm96kIlIe3DezcBSt1VKz8md-ZHhWbNsKcKEwB8T05ItKVg" \ 
 -H "App-Id: qjQYP-jCx-8FBsZSgNVzIw" \ 
 -H "App-Secret: -XeeN2UhtdphUGtI-FZpzg" \ 
 -X PATCH "/api/connectors/v2/sessions/:session_secret/success"

Example of request parameters

Example of response

{"data":{},"meta":{"time":"2019-11-18T16:04:48.773Z"}}
Request

PATCH /api/connectors/v2/sessions/:session_secret/success

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key. Can raise: AuthorizationMissing
App-Id string, required Provider's app_id from connection details tab. Can raise: ProviderNotFound, ProviderDisabled, ConfigurationError
App-Secret string, required Provider's app_secret from connection details tab.
Unpacked Request Authorization
Response

Upon successful request, 200 status code will be returned. See ‘Related Errors’ table for other possibilities.


data
hash, optional
Wrapper for the data.
Related Errors
Class Code Description
SessionClosed 400 Session specified in request is already closed and cannot be modified.
ConfigurationError 400 Missing configurations in dashboard.
SessionExpired 401 Found session is expired and cannot be processed anymore.
AuthorizationMissing 401 Authorization header is missing.
SessionFinalised 403 Session specified in request is already finalised and cannot be processed.
SessionNotFound 404 Session specified in request does not exist or cannot be retrieved.
ProviderNotFound 404 Provider specified in request does not exist or cannot be retrieved.
ProviderDisabled 406 Cooperation with specified Provider is impossible.

Update

Update callback may be accessed multiple times in order to request multiple steps of authorization or to send other updates to Salt Edge PSD2 Compliance session.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7InNlc3Npb25fZXhwaXJlc19hdCI6IjIwMjAtMDQtMTBUMTI6MzM6NTAuMjE1WiIsInN0YXR1cyI6IlJDVkQiLCJzY2Ffc3RhdHVzIjoicHN1QXV0aGVudGljYXRlZCIsInJlZGlyZWN0X3VybCI6Imh0dHBzOi8vcmVkaXJlY3QtdXJsLmNvbSIsImV4dHJhIjp7fSwiZnVuZHNfYXZhaWxhYmxlIjp0cnVlLCJzZXNzaW9uX3NlY3JldCI6IkJWdXZlU0xRQ3JBNWpCWVV5eFhlIn0sImV4cCI6MTcxNjA3NzIzMH0.V82WxrAGR1KJzdlHIm3cW4jEgpyOjvOBq3UPRmv-GO1txDcuL6evqheeHdqxX7IQpHlKcnEfWtft6DtRWSKqwd-sUl1euCh7R8vu3MtMcwUFeDZllZ3EA5Jk3CHNrj6sHRSD0eI35Naz90OT38su01H2p9PDXn3uapwP-DwwCAzJzgqDMwe0ZlhpZyhYHn3PYf9hHAKqin--sjLsFgfDphekzgcccvXq55ghGWG9TEYatO6vxwg5f6RrJrgW-DzxtRYsBktNTJ81_dqi_FBkthtwBVPce8-O71dPFdJFr8oFEE3bwzXmzF8nS7plSi0bcYZkZu5P53ANks1JQG3MOw" \ 
 -H "App-Id: q5QE7Dqlpm1d5weLS5pn7w" \ 
 -H "App-Secret: y8imt1cgG8x2zmBMrF-oxw" \ 
 -X PATCH "/api/connectors/v2/sessions/:session_secret/update"

Example of request parameters

Example of response

{"data":{},"meta":{"time":"2019-11-18T16:04:48.853Z"}}
Request

PATCH /api/connectors/v2/sessions/:session_secret/update

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key. Can raise: AuthorizationMissing
App-Id string, required Provider's app_id from connection details tab. Can raise: ProviderNotFound, ProviderDisabled, ConfigurationError
App-Secret string, required Provider's app_secret from connection details tab.
Unpacked Request Authorization
Response

Upon successful request, 200 status code will be returned. See ‘Related Errors’ table for other possibilities.


data
hash, optional
Wrapper for the data.
Related Errors
Class Code Description
SessionClosed 400 Session specified in request is already closed and cannot be modified.
ConfigurationError 400 Missing configurations in dashboard.
SessionExpired 401 Found session is expired and cannot be processed anymore.
AuthorizationMissing 401 Authorization header is missing.
SessionFinalised 403 Session specified in request is already finalised and cannot be processed.
SessionNotFound 404 Session specified in request does not exist or cannot be retrieved.
ProviderNotFound 404 Provider specified in request does not exist or cannot be retrieved.
ProviderDisabled 406 Cooperation with specified Provider is impossible.

Fail

Fail callback should be used when authorization process has been compromised for any reason: broken request, invalid credentials, etc.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7InNlc3Npb25fc2VjcmV0IjoiM1BRaXB1RFBvV3BhMTFGY1ZFVjYiLCJlcnJvcl9jbGFzcyI6IkludGVybmFsUHJvdmlkZXJFcnJvciIsImVycm9yX21lc3NhZ2UiOiJJbnRlcm5hbCBlcnJvciIsImV4dHJhIjp7fX0sImV4cCI6MTcxNjA3NzIzMX0.aK6Xu7_DzOs7x0OcyxDMc9tjtNMvLndiejQNQsb4FRsyE2KJ5FIlvAIS1M_2yBqvMoIUvrYs3ki05f5p2LyA7xWcleK7FqcqGMEmcU2rtCeFcgntbr5vD0QLNFRI-yA6751v6djIiu-J_2U-vDMYNghr6qQTXqomrmo7lSUyh-jNc56YwXFUe4oTGufBGyi4X8IdgCXKn3fhlAmZJoZ7nWJVvIa38hitJuOHpjol3gf0J4GuMswiDITR7usXLHZFIORjdHs03xnYXmTjSIAvV1MbBQsfLEG8FuR3fF_cJdzr3zrJXTNJEfNeJ9Dre--I1KmebsAUschohDLi07Td9g" \ 
 -H "App-Id: xU7SyhPrd95GAPSMNo_XMQ" \ 
 -H "App-Secret: BVSkESo7zpRdzk_hWUUwCQ" \ 
 -X PATCH "/api/connectors/v2/sessions/:session_secret/fail"

Example of request parameters

{"data":{"session_secret":"3PQipuDPoWpa11FcVEV6","error_class":"InternalProviderError","error_message":"Internal error","extra":{}},"exp":1574093208}

Example of response

{"data":{},"meta":{"time":"2019-11-18T16:04:48.710Z"}}
Request

PATCH /api/connectors/v2/sessions/:session_secret/fail

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key. Can raise: AuthorizationMissing
App-Id string, required Provider's app_id from connection details tab. Can raise: ProviderNotFound, ProviderDisabled, ConfigurationError
App-Secret string, required Provider's app_secret from connection details tab.
Unpacked Request Authorization
exp
integer, required
The lifetime of the request in timestamp UTC format. Values greater than: Current time.
Response

Upon successful request, 200 status code will be returned. See ‘Related Errors’ table for other possibilities.


data
hash, optional
Wrapper for the data.
Related Errors
Class Code Description
SessionClosed 400 Session specified in request is already closed and cannot be modified.
ConfigurationError 400 Missing configurations in dashboard.
SessionExpired 401 Found session is expired and cannot be processed anymore.
AuthorizationMissing 401 Authorization header is missing.
SessionFinalised 403 Session specified in request is already finalised and cannot be processed.
SessionNotFound 404 Session specified in request does not exist or cannot be retrieved.
ProviderNotFound 404 Provider specified in request does not exist or cannot be retrieved.
ProviderDisabled 406 Cooperation with specified Provider is impossible.

Tokens

Revoke

Revoke callback needs to be called any time a token is revoked on the Provider Connector side.

CURL

curl -i  \ 
 -H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.eyJkYXRhIjp7fSwiZXhwIjoxNzE2MDc3MjMyfQ.Z7dPW-VIRCZ4y8x3_53TxReHtocBFlN9ikEhKYDtaBWMfUXzE9zvY78kR_v_XgfsxGEONhUH4ey_KqlkbkB_PpdfrxAj6cLacLSKrr-3HxLgF-7JgbquqHL4Tio26xV4IHFR5hcfsf-CDHOvfNYEXO4Q3SwwB0-bmvRwA7HEeUnAI5mmTGWGgP5x6wchQV7hfNFQ2btRznOMktcTE4z6ZJm4vauz_uwTmo4w5PvqIEsQDQ9pRdgvQu6kW96utrG8kgkP_QZSgPRK7nBXhjVv_lw9smyURkTBfYv6poJNc0G9cSlkde2-rahIjWF4EuTZxvrQJu0sQ7KI8vOa98hB5w" \ 
 -H "App-Id: cfOK5P9RVooLksNv8il3rw" \ 
 -H "App-Secret: rwkTbW41SPT55uo1I_-UGQ" \ 
 -H "Token: example_Token" \ 
 -X PATCH "/api/connectors/v2/funds_confirmations/tokens/revoke"

Example of request parameters

{"data":{},"exp":1574093208}

Example of response

{"data":{"revoked":true},"meta":{"time":"2019-11-18T16:04:48.928Z"}}
Request

PATCH /api/connectors/v2/funds_confirmations/tokens/revoke

Headers
Header Type Description
Authorization string, required JSON Web Token containing payload, signed using RSA256 and application.private_key. Can raise: AuthorizationMissing
App-Id string, required Provider's app_id from connection details tab. Can raise: ProviderNotFound, ProviderDisabled, ConfigurationError
App-Secret string, required Provider's app_secret from connection details tab.
Token string, required Token for which we are requesting info. Can raise: TokenNotFound, TokenMissing
Unpacked Request Authorization
data
hash, required
Wrapper for the data.
exp
integer, required
The lifetime of the request in timestamp UTC format. Values greater than: Current time.
Response

Revoke callback needs to be called any time a token is revoked on the Provider Connector side.


Related Errors
Class Code Description
ConfigurationError 400 Missing configurations in dashboard.
TokenMissing 400 This request cannot be performed without Access_Token header.
AuthorizationMissing 401 Authorization header is missing.
TokenNotFound 401 Token specified in request does not exist or cannot be retrieved.
ProviderNotFound 404 Provider specified in request does not exist or cannot be retrieved.
ProviderDisabled 406 Cooperation with specified Provider is impossible.