API reference
iF Chile API
Capture campaign leads and read live space pricing to build your own quotations — all through a single, versioned REST API.
Lead intake for marketing partners. Push leads from campaigns, landing pages, and paid channels straight into the sales pipeline.
Everything an external CRM needs to operate: the location & space catalog with effective pricing. Quotations are generated on your side — the API never creates them.
- — All requests and responses are JSON.
- — Timestamps are ISO 8601 in UTC, e.g.
2026-07-01T13:00:00+00:00. - — Identifiers are opaque strings issued by the platform.
- — The API is versioned in the path:
/api/v1.
https://api-crm.ifchile.app/api/v1
curl https://api-crm.ifchile.app/api/v1/crm/locations \
-H "Authorization: Bearer iftkn-FZ2v…" \
-H "Accept: application/json"
Authentication
The API uses bearer tokens with the iftkn- prefix. Tokens are issued by
the iF Chile team and are shown exactly once — store them in a secret manager, never
in source control.
Every token is scoped to a single module. An agency token only reaches
/agency endpoints and a crm token only reaches /crm
endpoints. Requests with a valid token but the wrong scope return 403;
requests without a token return 401.
Send the token on every request in the Authorization header.
# Module-scoped bearer token
curl https://api-crm.ifchile.app/api/v1/crm/locations \
-H "Authorization: Bearer iftkn-FZ2vQn81xKpd…" \
-H "Accept: application/json"
{
"message": "Invalid ability provided."
}
Errors
The API uses conventional HTTP status codes. Every error body carries a human-readable
message; validation failures additionally include an errors map
keyed by field.
401
Unauthenticated. Missing or invalid token.
403
Forbidden. Wrong module scope, or the API client was disabled.
404
Not found. The resource does not exist upstream.
422
Unprocessable. Validation failed, or the platform rejected the operation (e.g. a visit slot was just taken).
429
Too many requests. Rate limit exceeded — retry after the indicated delay.
502
Bad gateway. The upstream platform is temporarily unreachable. Safe to retry reads.
{
"message": "The first name field is required. (and 1 more error)",
"errors": {
"first_name": ["The first name field is required."],
"source": ["The selected source is invalid."]
}
}
{
"message": "The upstream service is currently unavailable. Please try again later."
}
Rate limits
Each API client may issue up to 120 requests per minute.
The current window is exposed via the X-RateLimit-Limit and
X-RateLimit-Remaining response headers. When the limit is exceeded the API
responds with 429 and a Retry-After header — back off and retry
after that many seconds.
{
"message": "Too Many Attempts."
}
Agency module
Campaign leads
Push prospects captured by campaigns into the sales pipeline. The platform deduplicates people by email or phone and reuses a recent open lead when one exists, so retried submissions never create duplicates. Each token is granted a subset of acquisition sources — list those first, then submit leads using only the values returned.
/api/v1/agency/sources
List sources
Returns the acquisition channels this token may send in source when creating a lead.
The documentation lists every channel the platform knows; this endpoint is the source of truth
for what this client can actually use. An empty list means the client cannot create leads.
Parameters
curl https://api-crm.ifchile.app/api/v1/agency/sources \
-H "Authorization: Bearer iftkn-FZ2v…" \
-H "Accept: application/json"
{
"data": [
"paid_web",
"google_ads",
"meta_ads"
]
}
/api/v1/agency/business-lines
List business lines
Returns the published business lines this token may send in business_line.
Use the slug, not an internal ID.
Parameters
curl https://api-crm.ifchile.app/api/v1/agency/business-lines \
-H "Authorization: Bearer iftkn-FZ2v…" \
-H "Accept: application/json"
{
"data": [
{
"slug": "oficinas-privadas",
"name": "Oficinas privadas",
"description": "Espacios de trabajo privados y personalizados"
},
{
"slug": "cowork",
"name": "Cowork",
"description": "Ambientes colaborativos y flexibles"
},
{
"slug": "produccion-de-eventos",
"name": "Producción de eventos",
"description": "Organización integral de eventos corporativos"
},
{
"slug": "oficinas-virtuales",
"name": "Oficinas virtuales",
"description": "Presencia profesional sin oficina física"
}
]
}
/api/v1/agency/leads
Create a lead
Creates (or upserts) a person and an associated lead. Provide at least an email or a phone
number so the platform can identify the contact. Returns the lead and person identifiers,
plus a created flag — false means an existing open lead was reused.
Body parameters
-
first_namestring required - The contact's first name.
-
last_namestring - The contact's last name.
-
emailstring - Contact email. Required when
phoneis absent. -
phonestring - Contact phone in E.164 format. Required when
emailis absent. -
companystring - Company the contact represents.
-
sourceenum required - Acquisition channel granted to this token. Do not send a value just because it appears in
the platform catalog — call GET /api/v1/agency/sources
and use one of those strings. Anything else returns
422. -
campaign_idstring - Optional. The ad-platform campaign ID as a string (Google Ads Campaign ID or Meta
campaign.id), not a slug invented by iF. There is no campaign catalog — omit the field when the lead did not come from a paid campaign. Send digits as a string so large Meta IDs are not rounded. -
location_idstring - Published location slug, not the ULID. One of
if-agustinas,if-antofagasta,if-bilbao,if-el-bosque,if-el-golf,if-italia,if-la-florida,if-patio-paris,if-plaza-costanera,if-san-pedro-de-la-paz,if-torres-del-parque,if-zoco,switch-x-if,plus. -
business_linestring - Published business line slug, not an ID. Call
GET /api/v1/agency/business-lines
and send one of those slugs:
oficinas-privadas,cowork,produccion-de-eventos,oficinas-virtuales. -
engagement_typeenum - One of
new_opportunity,follow_up,reactivation,upsell,cross_sell. -
priorityenum - One of
low,medium,high,urgent. -
messagestring - Free-form message left by the prospect. Max 2,000 characters.
-
estimated_team_sizeinteger - Number of people the prospect needs space for.
-
desired_start_datedatetime - When the prospect would like to start, ISO 8601.
-
marketing_consentboolean - Whether the prospect opted into marketing communications.
curl -X POST https://api-crm.ifchile.app/api/v1/agency/leads \
-H "Authorization: Bearer iftkn-FZ2v…" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@acme.cl",
"company": "Acme SpA",
"source": "google_ads",
"campaign_id": "21201805480",
"location_id": "if-italia",
"business_line": "oficinas-privadas",
"estimated_team_size": 8,
"desired_start_date": "2026-08-01T00:00:00+00:00",
"marketing_consent": true
}'
{
"data": {
"lead_id": "ld_3kq9x",
"person_id": "pe_8m2v1",
"created": true
}
}
CRM module
Catalog
Read-only access to published locations, including timezone and weekly business hours.
/api/v1/crm/locations
List locations
Returns every published location, including its IANA timezone and weekly business hours — both required to interpret visit availability correctly.
Parameters
curl https://api-crm.ifchile.app/api/v1/crm/locations \
-H "Authorization: Bearer iftkn-FZ2v…"
{
"data": [
{
"id": "loc_9a8b7",
"name": "iF Italia",
"slug": "if-italia",
"address": "Av. Italia 850, Providencia",
"phone": "+56 2 2840 1100",
"email": "italia@ifchile.com",
"whatsapp": "+56 9 7777 1100",
"capacity": 320,
"timezone": "America/Santiago",
"business_hours": {
"monday": { "open": "09:00", "close": "19:00" },
"tuesday": { "open": "09:00", "close": "19:00" }
},
"status": "active"
}
]
}
/api/v1/crm/locations/{location}
Retrieve a location
Returns a single location by identifier. Responds with 404 when it does not exist.
Path parameters
-
locationstring required - The location identifier.
curl https://api-crm.ifchile.app/api/v1/crm/locations/loc_9a8b7 \
-H "Authorization: Bearer iftkn-FZ2v…"
{
"data": {
"id": "loc_9a8b7",
"name": "iF Italia",
"slug": "if-italia",
"timezone": "America/Santiago",
"business_hours": {
"monday": { "open": "09:00", "close": "19:00" }
},
"status": "active"
}
}
/api/v1/crm/business-lines
List business lines
Same catalog as the agency endpoint: published business lines identified by slug.
Parameters
curl https://api-crm.ifchile.app/api/v1/crm/business-lines \
-H "Authorization: Bearer iftkn-FZ2v…" \
-H "Accept: application/json"
{
"data": [
{
"slug": "oficinas-privadas",
"name": "Oficinas privadas",
"description": "Espacios de trabajo privados y personalizados"
}
]
}